MySQL 5.6

时间:2015-09-05 13:51:23

标签: mysql utf-8 character-encoding

我一直在尝试各种配置来强制将字符集和排序设置为utf8。但是,我尝试的所有内容都失败了,一些设置反映了拉丁字符集或整理。

这是来自IUS存储库的CentOS 6上的MySQL 5.6。

我在/usr/share/mysql/my.cnf上的配置

# The MySQL server
[mysqld]
port            = 3306
socket          = /var/lib/mysql/mysql.sock
skip-external-locking
key_buffer_size = 16K
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 128K
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

通过Heidi设置

enter image description here

来自MySQL客户端

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

mysql> show variables like 'coll%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | utf8_general_ci   |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)

我在5.1中没有任何问题。

更新#1

我已将default-character-set = utf8放在client的{​​{1}},mysqldmysql部分,并重新启动了MySQL服务。同样的事情,拉丁和utf8的混合。

my.cnf

更新#2

我的问题与使用迁移向导通过MySQL Workbench迁移数据库有关。生成的数据库包含我不想要的排序规则和字符集。如果我通过Heidi运行生成的脚本,我会得到与迁移结果相同的结果。

2 个答案:

答案 0 :(得分:0)

当您以init-connect(或其他root用户身份)进行连接时,

SUPER会被忽略。

my.cnfmy.ini)个文件中,将其添加到[mysql][client]下:

default-character-set = utf8

(我不知道Heidi是否会覆盖它 - 了解它是如何进行“连接”的。)

<强>附加物

character_set_database和_server不一定是个问题。 _client, connection 和_results用于说明客户端中的字节是如何编码的。您可以在CHARACTER SET utf8中添加CREATE TABLE来说明该表格包含的内容。

除了您展示的设置外,您对乱搞文本有什么症状?使用非英文文本的列进行此操作:

SELECT col, HEX(col) FROM ... WHERE ...

显示实际存储的内容。

答案 1 :(得分:0)

我最终在生成的脚本中编写了我想要的排序规则和字符集。

即。在创建数据库并添加列时,在必要时指定排序规则和字符集,utf8_unicode_ci,utf8 ......