MariaDB INSERT с данными в кириллице из MS Windows console (cp1252) не принимается
Требуется помощь с определением источника проблемы вставки данных в кириллице в консольном клиенте на MS Windows (cp1252).
- Операционная система Windows 10 с кодовой страницей cp1252 (North America)
- Установлена XAMPP (Control panel v3.2.4)
- Из управляющей панели XAMPP запускается console
- Переходим на utf8 кодовую страницу
chcp 65001 - Запускаю
mysql --default-character-set=utf8 -u root -p - Пытаюсь вставить
INSERT INTO x_test (title) VALUES ('проба') - Команда указывает на
'и находится в режиме ожидания
База данных создана командой
CREATE DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Таблица создана следующей командой
CREATE TABLE `x_test` (
`title` varchar(32) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
По рекомендациям найденым в интернете дополнительно делается
MariaDB [test]> SET NAMES utf8;
Query OK, 0 rows affected (0.000 sec)
Делается INSERT с латинницей (все прекрасно)
MariaDB [test]> INSERT INTO x_test (`title`) VALUES ('proba');
Query OK, 1 row affected (0.117 sec)
Попытка INSERT с кириллицей ждет '
MariaDB [test]> INSERT INTO x_test (`title`) VALUES ('проба');
'>
Переменные сессии следующие
MariaDB [test]> SHOW SESSION VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------------+
| 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:\bin\XAMPP\App\xampp\mysql\share\charsets\ |
+--------------------------+----------------------------------------------+
8 rows in set (0.001 sec)
Данные прекрасно вставляются через perl script, php script, HeidiSQL клиент.
SELECT в консоле с уже вставленными данными прекрасно выдает существующие данные
MariaDB [test]> select * from x_test;
+--------------+
| title |
+--------------+
| проба |
| проба |
| проба |
| Андрей |
| Андрей |
| Андрей |
| natasha |
| proba |
+--------------+
8 rows in set (0.000 sec)
В чем проблема с консолью и как её исправить?
Session log
John Smith@WORKSTATION c:\bin\xampp\app\xampp
# chcp
Active code page: 437
John Smith@WORKSTATION c:\bin\xampp\app\xampp
# mysql --default-character-set=utf8 -u root -p
Enter password: ******
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 24
Server version: 10.4.10-MariaDB mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> CREATE DATABASE `x_test` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Query OK, 1 row affected (0.002 sec)
MariaDB [(none)]> use x_test
Database changed
MariaDB [x_test]> SHOW SESSION VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------------+
| 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:\bin\XAMPP\App\xampp\mysql\share\charsets\ |
+--------------------------+----------------------------------------------+
8 rows in set (0.001 sec)
MariaDB [x_test]> CREATE TABLE `x_test` (
-> `title` varchar(32) COLLATE utf8_unicode_ci NOT NULL
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Query OK, 0 rows affected (0.420 sec)
MariaDB [x_test]> INSERT INTO x_test (`title`) VALUES ('proba');
Query OK, 1 row affected (0.056 sec)
MariaDB [x_test]> INSERT INTO x_test (`title`) VALUES ('проба');
Query OK, 1 row affected (0.049 sec)
MariaDB [x_test]> select * from x_test;
+-------+
| title |
+-------+
| proba |
| ????? |
+-------+
2 rows in set (0.000 sec)
MariaDB [x_test]> \q
Bye
John Smith@WORKSTATION c:\bin\xampp\app\xampp
#
Ответы (1 шт):
В MySQL подобного не наблюдается... версия 8.0.16, кодировка консоли 1251, в командной строке проверены "--default-character-set=utf8" и CP1251.
12.11.2020 c:\tmp
>chcp
Текущая кодовая страница: 1251
12.11.2020 c:\tmp
>cd "C:\Program Files\MySQL\MySQL Server 8.0\bin\"
12.11.2020 C:\Program Files\MySQL\MySQL Server 8.0\bin
>"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" "--defaults-file=C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" "-uakina" "-p" "--default-character-set=utf8"
Logging to file 'C:\Temporary\mysql80_console.log'
Enter password: *******
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.16 MySQL Community Server - GPL
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> CREATE DATABASE `x_test` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Query OK, 1 row affected, 2 warnings (0.19 sec)
mysql> use x_test
Database changed
mysql> SHOW SESSION VARIABLES LIKE 'character_set%';
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 8.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set, 1 warning (0.01 sec)
mysql> CREATE TABLE `x_test` (
-> `title` varchar(32) COLLATE utf8_unicode_ci NOT NULL
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Query OK, 0 rows affected, 3 warnings (0.69 sec)
mysql> INSERT INTO x_test (`title`) VALUES ('proba');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO x_test (`title`) VALUES ('проба');
Query OK, 1 row affected (0.21 sec)
mysql> select * from x_test;
+------------+
| title |
+------------+
| proba |
| проба |
+------------+
2 rows in set (0.00 sec)
mysql> exit
Bye
12.11.2020 C:\Program Files\MySQL\MySQL Server 8.0\bin
>
Выложите аналогичный лог в своём случае.
PS. Все варнинги связаны с тем, что UTF8 есть алиас UTF8MB3, но скоро станет алиасом UTF8MB4, а нынешний вообще попадёт под deprecated.