【问题标题】:MySQL 5.7.7 collation 'hebrew_general_ci' is not valid for character set 'utf8'MySQL 5.7.7 排序规则“hebrew_general_ci”对字符集“utf8”无效
【发布时间】:2015-07-13 23:41:53
【问题描述】:

问题总结:无法使用以下变量打开 MySQL 5.7.7:

character_set_client    hebrew
character_set_connection    hebrew
character_set_database  hebrew
character_set_filesystem    hebrew
character_set_results   hebrew
character_set_server    hebrew
character_set_system    hebrew
character_sets_dir  C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\

MYSQL 5.7.7 写的:'hebrew_general_ci' 对字符集'utf8' 无效

我会得到什么:

character_set_client    utf8
character_set_connection    utf8
character_set_database  utf8
character_set_filesystem    binary
character_set_results   utf8
character_set_server    utf8
character_set_system    utf8
character_sets_dir  C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\

软件:MySQL 5.7.7

操作系统:WIN 7 64位

我做了什么: 1。将 C:\ProgramData\MySQL\MySQL Server 5.7\My.ini 配置文件中的所有数据更改为:

[client]
no-beep
default-character-set = hebrew

[mysql]

default-character-set=hebrew

[mysqld]

init_connect='SET collation_connection = hebrew_general_ci'
character-set-server = hebrew
collation-server = hebrew_general_ci
init-connect='SET NAMES hebrew'
init_connect='SET collation_connection = hebrew_general_ci' 

2。从 cmd 运行服务器:

mysqld --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.7\my.ini"  

3.从 CMD 运行服务器时收到错误消息

MySQL 5.7.7 collation 'hebrew_general_ci' is not valid for character set 'utf8'

**4。主要问题是配置没有发生任何变化**

【问题讨论】:

  • 在 [mysqld] 下尝试仅保留 character-set-server...collation server.. 并添加 init_connect='SET collation_connection = hebrew_general_ci,NAMES hebrew'
  • 同时添加或取消注释这些行character_set_client = hebrew character_set_connection = hebrew character_set_results = hebrew 并重新启动

标签: mysql character-encoding collation hebrew


【解决方案1】:

CHARACTER SET hebrew 中 Alef 的 HEXF0;在 utf8 中,它是 D790。检查您的应用程序语言中的十六进制,看看您有哪个。然后相应地执行SET NAMEShebrewutf8

mysql> SET NAMES hebrew;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'char%';
+--------------------------+-----------------------------------------------+
| Variable_name            | Value                                         |
+--------------------------+-----------------------------------------------+
| character_set_client     | hebrew                                        |
| character_set_connection | hebrew                                        |
| character_set_database   | latin1                                        |
| character_set_filesystem | binary                                        |
| character_set_results    | hebrew                                        |
| character_set_server     | utf8                                          |
| character_set_system     | utf8                                          |
| character_sets_dir       | c:\wamp\bin\mysql\mysql5.6.12\share\charsets\ |
+--------------------------+-----------------------------------------------+
8 rows in set (0.00 sec)

注意SET NAMES 只修改了其中的 3 个条目。修改其他任何一个都是危险的。建议你不要改变其他人。

SET NAMES 向 mysql 声明 client 中的编码是什么。表中的编码可以不同。特别是,由于您似乎想要hebrew_general_ci,因此获得它的唯一方法(或等效的,因为似乎没有 utf8_hebrew_ci)是将您的列声明为CHARACTER SET hebrew COLLATION hebrew_general_ci。请记住,此设置与客户端中的编码无关; SET NAMES 在需要时处理转换。

如果应用程序涉及网页,则元标记需要包含客户端的字符集。

root 连接时,会跳过init_connect(在my.ini 中)。因此,您可能会发现令人困惑的结果;避免成为 root(或任何SUPER 用户)。

This collation chart 指定 hebrew_general_ci 中发生的情况;它可能没有什么特别的。我的观点是——utf8utf8_general_ci 可能会给你相同的结果。

【讨论】:

    【解决方案2】:

    感谢您快速且内容丰富的回复。我阅读 MySQL 表的应用程序是 SAS9.4。实际上,我正在尝试通过 SAS\ACCESS Interface to MySQL 读取 MySQL 表。

    经过一番研究,我更改了我的 SAS cfg 文件 (C:\Program Files\SASHome\SASFoundation\9.4\sasv9.cfg)

    From: -config "C:\Program Files\SASHome\SASFoundation\9.4\nls\en\sasv9.cfg"
    To: -config "C:\Program Files\SASHome\SASFoundation\9.4\nls\u8\sasv9.cfg"
    

    现在这两个应用程序都“交谈”了 utf8。

    这解决了问题... :)

    非常感谢!!

    丹尼尔

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-26
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      相关资源
      最近更新 更多