MySQL chartset

博客指出MySQL的“utf8mb4”是真正的“UTF - 8”,而“utf8”是专属编码,能编码的Unicode字符不多。建议所有使用“utf8”的MySQL和MariaDB用户改用“utf8mb4”,还提供了将现有数据库字符编码从“utf8”转成“utf8mb4”的指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--  # https://dev.mysql.com/doc/refman/8.0/en/charset-database.html
-- create database aixinyz;  -- 默認為:latin1,以安裝MYSQL時,默認,當害安裝時選了UTF-8就好了,沒有隻能代碼實現
-- 創建數据的編碼格式
-- CREATE DATABASE aixinyz CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CREATE DATABASE aixinyz CHARACTER SET utf8 COLLATE utf8_general_ci;

-- 查詢編碼格式
show variables like '%char%';

-- SET NAMES GB2312; 

ALTER DATABASE  db_aixinyz_com
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;

-- 修改數据的編碼格式
ALTER DATABASE aixinyz
    DEFAULT CHARACTER SET utf8
   -- default character set=utf8
   -- default character set server=utf8
   -- default collation server=utf8_general_ci
    DEFAULT COLLATE utf8_general_ci;
    
 -- 設置   
SET character_set_server = utf8;

set character_set_results=gb2312; 

select 'host' from user; -- where user='root';


 /*
 character_set_client	utf8
character_set_connection	utf8
character_set_database	latin1  -- phpmyadmin2 客戶查詢亂碼
character_set_filesystem	binary
character_set_results	utf8
character_set_server	latin1
character_set_system	utf8

mysql> SET character_set_client = utf8 ;
mysql> SET character_set_connection = utf8 ;
mysql> SET character_set_database = utf8 ;
mysql> SET character_set_results = utf8 ;
mysql> SET character_set_server = utf8 ;
 
mysql> SET collation_connection = utf8 ;
mysql> SET collation_database = utf8 ;
mysql> SET collation_server = utf8 ; 
 */  
 
 SHOW DATABASES;
 SHOW DATABASES; -- 列出 MySQL Server 上的資料庫。
SHOW TABLES FROM test; -- 列出資料庫的資料表。
SHOW TABLE STATUS FROM test; -- 列出資料庫的資料表,提供比較詳細的訊息。
SHOW COLUMNS FROM test; -- 列出資料表的欄位,同 SHOW FIELDS FROM tbl_name [FROM db_name],DESCRIBE tbl_name [col_name]。
SHOW FULL COLUMNS FROM test; -- 列出資料表的欄位,提供比較詳細的訊息,同 SHOW FULL FIELDS FROM tbl_name [FROM db_name]。
SHOW INDEX FROM test; -- 列出資料表的索引訊息。
SHOW STATUS; -- 列出 Server 的狀態訊息。
SHOW VARIABLES; -- 列出 MySQL 系統變數的值。
SHOW PROCESSLIST; -- 顯示哪個執行緒正在運行。
SHOW GRANTS FOR user; -- 列出對一個用戶必須發出以重複授權的授權命令

--
-- 表的结构 `test`
--
DROP TABLE `test`;

DROP TABLE IF EXISTS `test`;
CREATE TABLE IF NOT EXISTS  `test` (
  `id` int(11) NOT NULL comment 'ID号' auto_increment,
  `names` varchar(255) character set utf8 NOT NULL default 'geovindu' COMMENT '姓名',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='geovindu 塗聚文測試表' AUTO_INCREMENT=2 ;

--
-- 转存表中的数据 `test`
--
select * from test;

-- 修改表的注释
alter table test comment '修改后的塗聚文測試表';

-- 修改字段的注释
alter table test modify column `id` int comment 'ID号';
alter table test modify column `names` varchar(255) COMMENT '姓名';
-- 在生成的SQL语句中看

show create table test;

-- 在元数据的表里面看

use information_schema;

select * from TABLES where TABLE_SCHEMA='aixinyz' and TABLE_NAME='test';

-- 查看字段注释的方法
-- V 5.7
show full columns from `test`;


-- 在元数据的表里面看
select * from COLUMNS where TABLE_SCHEMA='aixinyz' and TABLE_NAME='test';

-- 删除一个字段
alter table test DROP COLUMN new2;

-- 
-- 修改一个字段的类型
alter table test MODIFY new1 VARCHAR(10);
-- 修改一个字段的名称,此时一定要重新指定该字段的类型
alter table test CHANGE new1 new4 int;

-- 增加一个字段,默认为空
alter table test add  geovindu VARCHAR(20) DEFAULT NULL;
alter table test add  geovindu VARCHAR(20) DEFAULT NULL COMMENT '塗聚文' AFTER `names`;

-- 增加一个字段,默认不能为空
alter table test add `address` VARCHAR(20) NOT NULL COMMENT '塗聚文' AFTER `names`;

alter table test add `address` VARCHAR(20) NOT NULL  after `names`;

  Since browser detection can be tricky and very slow, I compared a few packages.

http://thadafinser.github.io/UserAgentParserComparison/v5/index.html

https://github.com/sinergi/php-browser-detector
https://github.com/WhichBrowser/Parser-PHP
https://github.com/piwik/device-detector
http://php.net/manual/en/function.get-browser.php

 

 

✓、✔、☑、(✓) ✗, ✘, x, ×, X, ✕, ☓, ✖ 、(✗)、☒
<span style="font-size:16px;font-family:Wingdings 2">&#82;</span>
<input type="checkbox" checked="checked"/>
<button>√</button>

 

 

https://code.visualstudio.com/docs/languages/php

https://marketplace.visualstudio.com/items?itemName=DEVSENSE.PHPToolsforVisualStudio

https://www.devsense.com/en/download

https://httpd.apache.org/docs/current/platform/windows.html
https://www.apachefriends.org/index.html
https://code.visualstudio.com/docs/languages/php

https://www.apachehaus.com/
https://www.apachelounge.com/download/

 

简单概括如下:

  • MySQL 的“utf8mb4”是真正的“UTF-8”。

  • MySQL 的“utf8”是一种“专属的编码”,它能够编码的 Unicode 字符并不多。

我要在这里澄清一下:所有在使用“utf8”的 MySQL 和 MariaDB 用户都应该改用“utf8mb4”,永远都不要再使用“utf8”。

如果你在使用 MySQL 或 MariaDB,不要用“utf8”编码,改用“utf8mb4”。这里提供了一个指南用于将现有数据库的字符编码从“utf8”转成“utf8mb4”:

https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4

 英文原文

https://medium.com/@adamhooper/in-mysql-never-use-utf8-use-utf8mb4-11761243e434

 

转载于:https://www.cnblogs.com/geovindu/p/9272657.html

<think>嗯,用户之前问过关于rsyslog中文乱码的问题,现在又提到了“rsyslog chartset utf8”,看起来可能有拼写错误,应该是“charset utf8”。用户可能是在配置rsyslog时遇到了编码问题,特别是UTF-8的设置。需要先确认用户的需求,可能是想了解如何在rsyslog中正确设置字符集为UTF-8,以解决中文乱码的问题。 首先,回顾之前的回答,已经涵盖了系统locale检查、rsyslog配置模板、输出文件编码、远程传输以及验证步骤。用户这次的问题可能更具体,想直接知道如何在rsyslog中设置字符集为UTF-8,或者之前的方法没有完全解决他们的问题。 需要注意用户可能的拼写错误,确保回答中使用正确的术语,比如“charset”而不是“chartset”。同时,用户可能希望得到更简明的步骤,或者对某些配置细节有疑问。例如,用户可能在配置模板时遇到了问题,或者没有正确重启服务导致配置未生效。 另外,考虑到用户可能是系统管理员或开发人员,他们可能在部署服务时遇到日志乱码,影响问题排查。需要确保提供的步骤清晰,并涵盖常见问题点,如应用程序本身的编码设置、终端工具的配置等。 可能需要强调几个关键点:检查系统locale是否正确,配置rsyslog模板强制使用UTF-8,指定输出文件的编码,以及验证步骤。此外,提醒用户检查应用程序是否以UTF-8输出日志,以及远程传输时的编码一致性。 另外,用户可能没有正确应用模板配置,或者在配置文件中位置放置错误,导致配置未生效。需要指出配置的位置通常在/etc/rsyslog.conf或/etc/rsyslog.d/下的自定义文件,并且重启服务的重要性。 最后,考虑到用户可能已经尝试过之前的建议但仍有问题,需要建议进一步的排查步骤,比如检查日志文件的编码是否正确,使用hexdump查看原始字节,确认是否真的是编码问题,或者是否有其他因素导致乱码。</think>在 **rsyslog** 中正确配置字符集为 **UTF-8**,是解决中文乱码问题的关键。以下是针对 `charset utf8` 的配置方法和注意事项: -- ### **1. 核心配置:强制 UTF-8 编码** #### **(1) 修改 rsyslog 模板** 在 rsyslog 配置文件(如 `/etc/rsyslog.conf` 或 `/etc/rsyslog.d/*.conf`)中,通过模板明确指定 UTF-8 编码: ```bash # 定义自定义模板,指定 UTF-8 编码 $template CustomFormat,"%timegenerated% %HOSTNAME% %syslogtag%%msg%\n" $ActionFileDefaultTemplate CustomFormat # 应用模板 property(name="msg" spifno1stsp="on" ) # 保留原始消息格式 # 强制使用 UTF-8 编码 $ActionFileDefaultEncoding utf8 ``` #### **(2) 输出规则中指定编码** 在日志输出路径后添加 `;utf8` 标志: ```bash # 示例:将系统日志输出到文件,并指定编码 *.* /var/log/syslog;CustomFormat;utf8 ``` -- ### **2. 关键检查点** #### **(1) 系统 Locale 一致性** 确保系统和终端的 Locale 均为 UTF-8: ```bash # 检查当前 Locale locale # 输出应包含:LANG=zh_CN.UTF-8 或 en_US.UTF-8 # 永久修改 Locale(如需要) sudo localectl set-locale LANG=zh_CN.UTF-8 ``` #### **(2) 日志文件的存储编码** 生成日志后,验证文件编码是否为 UTF-8: ```bash file -i /var/log/syslog # 期望输出:/var/log/syslog: text/plain; charset=utf-8 ``` #### **(3) 终端工具的编码设置** - **SSH 客户端**(如 PuTTY、Xshell)需设置为 UTF-8 编码。 - **Linux 终端**: ```bash echo $LANG # 应为 UTF-8 # 临时设置终端编码 export LANG=zh_CN.UTF-8 ``` --- ### **3. 远程日志传输编码** 若日志通过 **TCP/UDP/TLS** 传输,需在发送端和接收端统一编码: #### **(1) 发送端配置** ```bash # 加载 TCP 模块 $ModLoad imtcp $InputTCPServerRun 514 # 指定传输编码(依赖 TLS 配置) $DefaultNetstreamDriver="gtls" $ActionSendStreamDriverMode="1" $ActionSendStreamDriverAuthMode="x509/name" ``` #### **(2) 接收端配置** ```bash # 接收时强制 UTF-8 $template RemoteLog,"/var/log/remote/%HOSTNAME%.log;RSYSLOG_FileFormat;utf8" $RuleSet remote *.* ?RemoteLog $RuleSet RSV1 ``` -- ### **4. 重启服务并验证** ```bash sudo systemctl restart rsyslog ``` - **验证日志内容**: ```bash # 直接查看日志(确保终端编码正确) tail -n 20 /var/log/syslog # 使用 hexdump 检查非 ASCII 字符(如中文) hexdump -C /var/log/syslog | grep -A 1 "中" ``` --- ### **5. 常见问题** 1. **配置未生效** - 检查配置文件语法:`rsyslogd -N1`。 - 确保配置未被其他文件覆盖(如 `/etc/rsyslog.d/` 中的冲突配置)。 2. **应用程序编码不一致** - 部分程序(如 Java、Nginx)需独立配置 UTF-8。例如: ```bash # Java 启动参数 -Dfile.encoding=UTF-8 ``` 3. **字体缺失** - 安装中文字体包:`sudo apt install fonts-wqy-zenhei`(Debian/Ubuntu)。 -- 通过以上步骤,可确保 **rsyslog** 从日志收集、传输到存储全程使用 UTF-8 编码,彻底解决中文乱码问题。若仍有异常,需结合具体场景检查中间链路(如代理、数据库等)的编码设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值