数据库-字符集笔记

以下笔记以MYSQL数据库为例。

一. 查询数据库字符集
show variables like ‘character_set_%’;
show variables like ‘collation_%’;

结果如下:
character_set_client:utf8mb4
character_set_connection:utf8mb4
character_set_database:utf8
character_set_filesystem:binary
character_set_results:utf8mb4
character_set_server:utf8
character_set_system:utf8

字符集说明:
character-set-server/default-character-set:服务器字符集,默认情况下所采用的。
character-set-database:数据库字符集。
character-set-table:数据库表字符集。

优先级:character-set-table > character-set-database > character-set-server > default-character-set。所以一般情况下只需要设置character-set-server,在创建数据库和表时不特别指定字符集,这样统一采用character-set-server字符集。

character-set-client:客户端的字符集、客户端默认字符集。当客户端向服务器发送请求时(插入、更新数据时),请求以该字符集对数据进行编码。
character-set-results:结果字符集。服务器向客户端返回结果或者信息时,结果以该字符集进行编码。

优先级:character-set-results > character-set-client。如果没有设置results字符集,character-set-client 的字符集将作为默认的字符集。所以只需要设置character-set-client字符集。

要处理中文,则可以将character-set-server和character-set-client均设置为GB2312,如果要同时处理多国语言,则设置为UTF8。

二. 解决数据库乱码
乱码的问题通常与客户端数据库连接数据库查询结果的字符集设置有关。

客户端是指多种访问mysql 数据库的方式。通过命令行访问,命令行窗口就是客户端;通过JDBC 等连接访问,程序就是客户端。

解决乱码的方法是,将以下四个字符集设置一致:
character-set-server:服务器字符集。
character_set_client:客户端的字符集。
character_set_results:结果字符集。
character_set_connection:连接字符集。

三. 修改字符集
set 变量名 utf8;

四. varchar类型的解读

(1)字符和字节啥关系?
字符:我们输入的东西都叫字符。比如汉字、英文、数字,标点符号等;
字节:文件存储的最小单位。
字符与字节的转换:一个英文字符=一个字节;一个中文字符的字节数,根据编码方式的不同,字节数不同;UTF8编码的话,一个中文字符=3个字节;GBK编码的话,一个中文字符=2个字节。

(2)varchar类型的字段,长度到底是指字节还是字符呢,最大长度是多少?
varchar的长度到底是字符还是字节,以数据库类型而论。

mysql数据库:varchar存的是字符,最大长度为65535个字节。
utf8编码的中文字符,最大长度 = 65535/3 = 20000左右;
GBK编码的在中文字符,最大长度 = 65535/2 = 30000左右;
英文字符,最大长度 = 65535/1 = 65535;

postgre数据库:varchar存的是字符,最大长度为65535个字节。
utf8编码的中文字符,最大长度 = 65535/3 = 20000左右;
GBK编码的在中文字符,最大长度 = 65535/2 = 30000左右;
英文字符,最大长度 = 65535/1 = 65535;

oracle数据库:varchar存的是字节,最大长度为65535个字节。
utf8编码的中文字符,最大长度 = 65535;
GBK编码的在中文字符,最大长度 = 65535;
英文字符,最大长度 = 65535;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章