Сравнение MySQL 5.7.7 'hebrew_general_ci' недопустимо для набора символов 'utf8'

Краткое описание проблемы: не удается открыть 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. Основная проблема в том, что никаких изменений в конфигурации не происходит **


person Daniel Dor    schedule 04.05.2015    source источник
comment
Попробуйте под [mysqld] оставить только character-set-server... и collation server.. и добавить init_connect='SET collation_connection = hebrew_general_ci,NAMES hebrew'   -  person Mihai    schedule 04.05.2015
comment
Также добавьте или раскомментируйте эти строки character_set_client = hebrew character_set_connection = hebrew character_set_results = hebrew и перезапустите   -  person Mihai    schedule 04.05.2015


Ответы (2)


HEX для Алеф в CHARACTER SET hebrew это F0; в utf8 это D790. Проверьте шестнадцатеричный код языка вашего приложения, чтобы узнать, какой у вас установлен. Затем выполните от SET NAMES до hebrew или utf8 соответственно.

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, какая кодировка используется в вашем клиенте. Кодировка в таблице может быть разной. В частности, поскольку вам кажется, что вам нужен hebrew_general_ci, единственный способ получить его (или эквивалент, поскольку, похоже, нет utf8_hebrew_ci), - это объявить ваши столбцы CHARACTER SET hebrew COLLATION hebrew_general_ci. Имейте в виду, что этот параметр не зависит от кодирования в клиенте; SET NAMES при необходимости выполняет преобразование.

Если приложение включает веб-страницу, метатег должен включать набор символов клиента.

При подключении как root init_connectmy.ini) пропускается. Следовательно, вы можете найти запутанные результаты; избегайте использования root (или любого SUPER пользователя).

Эта таблица сопоставления указывает, что происходит в hebrew_general_ci; это не может быть ничего особенного. Я хочу сказать, что utf8 с utf8_general_ci могут дать вам идентичные результаты.

person Rick James    schedule 04.05.2015

Спасибо за быстрый и информативный ответ. Мое приложение для чтения таблиц MySQL - SAS9.4. Собственно, я пытаюсь читать таблицы MySQL через интерфейс SAS \ ​​ACCESS к 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.

Это решило проблему ... :)

Большое спасибо!!

Даниэль

person Daniel Dor    schedule 05.05.2015