mysql编译时哪个参数可以更改mysql默认字符集

说实话,MySQL有两个字符问题,一是CharacterSets,二是Collat​​ions。
字符集是音译的参数和方法,排序规则是比较规则。
这两者可以在四个级别上指定:数据库实例、单个数据库、表和列。

对于普通用户,建议数据集使用utf8 编码。
但如果你发现乱码,这不仅仅是MySQL存储数据的问题,还取决于你的程序是如何编码的,以及你的程序如何将数据传输到MySQL的。

MySQL 有一个在安装时设置的默认字符。
配置MySQL时,可以使用两个参数DEFAULT_CHARSET=utf8 和DEFAULT_COLLATION=utf8 _general_ci(这是MySQL 5 .5 版本,如果是5 .1 版本,使用--with charset utf8 -with collat​​ion utf8 _general_ci)。
定义好这些后,当客户端连接数据库时,它就默认为utf8 ,程序不需要操心任何事情。

mysql数据库在安装时默认的字符集编码为utf8但是为什么向数据库插入中文出现乱码,

坦白说,MySQL字符集相当复杂,但是一旦分解成碎片就会变得更容易处理。
我们先来说说默认字符集。
这个东西必须在几个层面上发现:
1 编译mysql时,默认是latin1 (即iso8 8 5 9 -1 ,西文字符就足够了)。
您可以在安装 mysql 时在 my.ini 中更改此设置。
如果没有,请使用编译的。
例如,如果我在安装过程中没有更改它,则默认设置将为 latin1
2 启动mysqld服务时,可以在命令行指定默认字符集。
如果不指定,则使用 my.ini 中写入的内容。
此时character_set_server被设置为默认值。

3 创建新数据库时,除非特别指定,否则数据库字符集将遵循character_set_server。
比如我启动MySQL后,默认的character_set_server是latin1 ,新建的数据库默认也是latin1
4 选择数据库后,character_set_database 将成为该数据库的默认字符集。
这时候你在里面创建了一个表,表的默认字符集就会跟随数据库。

5 创建表后,在设置列时,除非另有说明,列的默认字符集将沿用表的字符集。

所以你看,如果你不改变任何东西,就使用latin1 但通常在安装mysql时,会将default-character-set改为utf8 ,所以默认都会使用utf8 当我安装它时,我在 my.ini 中将默认字符集设置为 utf8 重新启动服务后,我运行了创建数据库:
sql 创建数据库测试默认charset=utf8 ;
测试数据库默认为utf8
检查默认字符集非常简单:
sql 显示变量,如“character%”;
你会看到character_set_server是utf8 但有时你会发现数据库中存储的字符仍然是乱码。
这是因为连接层的字符集不正确。
例如,如果你的客户端使用latin1 编码发送请求,但服务器默认为utf8 ,那么数据就会出现乱码。

解决方案是在执行查询之前执行:
sql 设置名称“utf8 ”;
这相当于同时将character_set_client、character_set_result和character_set_connection设置为utf8
总结要点: 1 、安装mysql时,将default-character-set设置为utf8 或gbk 2 、连接数据库时指定character_set_connection 3 、查询前使用SET NAMES 'utf8 '
例如连接jdbc时,可以添加:
jdbc:mysql://localhost:3 3 06 /test?useUnicode=true&characterEncoding=utf8
或者连接后立即执行:
java conn.createStatement().execute("设置名称'utf8 '");
总之,最烦人的字符集问题就是连接层不对齐。
如果使用gbk进行开发,只需在安装mysql时将default-character-set设置为gbk即可,连接时也使用gbk。
不要强制使用 utf8 ,因为这可能会扭曲字符。

MySQL中的字符集与排序规则详解

说白了,MySQL中的字符集和排序规则对于数据库的正确性和性能至关重要。
其实很简单。
字符集决定了数据在数据库中如何编码,排序规则决定了数据如何排序和比较。

首先我们来说说最重要的事情,字符集。
比如我们去年做的项目,字符集选错了,汉字乱码,只好从头再来。
常见的字符集有ASCII、UTF-8 、GB2 3 1 2 等,其中UTF-8 是通用编码,支持世界上几乎所有的字符,是互联网上的主流。

后来发现出了问题,排序规则不能忽略。
例如,utf8 _general_ci 不区分大小写,而 utf8 _bin 区分大小写。
还有另一个重要的细节。
例如,utf8 _unicode_ci 基于 Unicode 标准。
虽然支持多语言混合排序,但性能可能会稍低。

起初我认为选择哪种字符集或排序规则并不重要,但后来我意识到这是错误的。
配置错误可能会导致乱码、排序错误或性能下降。
因此,根据应用场景进行选择很重要。
例如,在多语言环境中,首选 utf8 mb4 字符集和 utf8 _unicode_ci 排序规则。
对于中文数据排序,可以使用gb2 3 1 2 /gbk字符集和gb2 3 1 2 _chinese_ci排序规则。
对于完全匹配的需求,例如:存储密码或查询机密数据,则使用_bin或_cs排序。

等等,还有一点:性能优化也很重要。
在不需要排序规则的场景下,可以使用utf8 _general_ci来提高查询速度。

总之,建议在设计阶段明确规范,通过SHOWCHARACTERSET和SHOWCOLLATION命令检查系统支持的选项,根据业务需求综合选择字符集和排序规则。
很多人没有关注,但我认为值得一试。