Error 1366 hy000 incorrect string value

Learn how to fix MySQL 'Incorrect string value' ERROR 1366 when inserting new data

When you try to insert a new record into your MySQL database table, you may encounter an error saying Incorrect string value along with some UTF-8 hex code for the description.

For example, suppose you create a Test table with only one column as follows:

CREATE TABLE `Test` (
  `names` varchar(255)
) 

Next, let’s insert the following Egyptian hieroglyph character into the table:

INSERT INTO Test VALUES('𓀀');

Your MySQL server may respond with the following error:

ERROR 1366 (HY000): 
Incorrect string value: 'xF0x93x80x80' for column 'names' at row 1

The error above is because the character 𓀀 requires 4-bytes to be represented in UTF-8 encoding.

By default, MySQL databases and tables are created using a UTF-8 with 3-bytes encoding. You can see the encoding used for your table by using the SHOW CREATE TABLE statement as follows:

SHOW CREATE TABLE Test G

Here’s the result from my computer:

*************************** 1. row ***************************
       Table: Test
Create Table: CREATE TABLE `Test` (
  `names` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3

As you can see, the table uses the DEFAULT CHARSET=utf8mb3 and the names column uses CHARACTER SET utf8.

The MySQL utf8 or utf8mb3 can’t store string values that contain a UTF-8 4-bytes character.

To store the values, you need to use the utf8mb4 character set.

Here’s the query to alter your database, table, or column to utf8mb4 character set:

-- Change a database
ALTER DATABASE [database_name] 
  CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; 

-- Change a table
ALTER TABLE [table_name] 
  CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 

-- Change a column
ALTER TABLE [table_name] 
  CHANGE [column_name] [column_name] VARCHAR(255) 
  CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

When you change the character set on the database level, then any new table you create for that database in the future will use that character set as the default encoding.

Returning to the Test table, you can alter just the names column to make the INSERT statement works:

ALTER TABLE `Test`
  CHANGE `names` `names` VARCHAR(255) 
  CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Now you should be able to insert the character 𓁴 into the table:

INSERT INTO Test VALUES('𓁴');
-- Query OK, 1 row affected (0.00 sec)

By default, MySQL version 8 should use utf8mb4 encoding and collation for your databases. If you see utf8 or utf8mb3, then you might be using MySQL version below 8 (MySQL version 5 may default to utf8mb3).

When you encounter this error, pay attention to the characters that you want to insert into the database.

They may look like normal characters, but if you copy and paste them from some source, then they may have a strange encoding attached to them.

For example, the GOTHIC LETTER SAUIL 𐍃 looks like a normal capital S but actually a 4-bytes character:

INSERT INTO Test VALUES('𐍃');

ERROR 1366 (HY000): 
Incorrect string value: 'xF0x90x8Dx83' for column 'names' at row 1

Alternatively, you can also pass the hex code (xF0x90x8Dx83 in the example above) into Google to look for the exact character that causes the error.

To conclude, the ERROR 1366: Incorrect string value happens when MySQL can’t insert the value you specified into the table because of incompatible encoding.

You need to modify or remove characters that have 4-bytes UTF-8 encoding, or you can change the encoding and collation used by MySQL.

Note that utf8 in MySQL always refers to utf8mb3.

To use the 4-bytes UTF-8 encoding, it needs to be specified as utf8mb4.

With this information, you should now be able to resolve this error. Feel free to use the provided ALTER statements above if you need it 👍

Содержание

  1. MySQL — How to fix the ‘Incorrect string value’ error
  2. Level up your programming skills
  3. About
  4. Laravel по-русски
  5. #1 16.01.2017 17:05:48
  6. ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  7. #2 16.01.2017 19:03:01
  8. Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  9. #3 16.01.2017 19:13:07
  10. Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  11. #4 16.01.2017 19:29:58
  12. Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  13. #5 17.01.2017 08:13:20
  14. Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  15. #6 17.01.2017 15:53:33
  16. Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  17. #7 17.01.2017 16:15:03
  18. Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  19. #8 17.01.2017 16:18:55
  20. Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  21. #9 17.01.2017 16:59:54
  22. Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  23. #10 17.01.2017 18:11:54
  24. Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  25. #11 17.01.2017 18:15:54
  26. Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  27. #12 18.01.2017 07:46:33
  28. Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  29. #13 18.01.2017 18:32:58
  30. Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  31. Laravel по-русски
  32. #1 16.01.2017 17:05:48
  33. ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  34. #2 16.01.2017 19:03:01
  35. Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  36. #3 16.01.2017 19:13:07
  37. Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  38. #4 16.01.2017 19:29:58
  39. Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  40. #5 17.01.2017 08:13:20
  41. Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  42. #6 17.01.2017 15:53:33
  43. Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  44. #7 17.01.2017 16:15:03
  45. Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  46. #8 17.01.2017 16:18:55
  47. Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  48. #9 17.01.2017 16:59:54
  49. Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  50. #10 17.01.2017 18:11:54
  51. Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  52. #11 17.01.2017 18:15:54
  53. Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  54. #12 18.01.2017 07:46:33
  55. Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  56. #13 18.01.2017 18:32:58
  57. Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:
  58. Русские Блоги
  59. Решена проблема ошибки 1366: неверное строковое значение, то есть эмодзи нельзя вставить в базу данных Mysql
  60. предисловие
  61. текст
  62. 1. Код (Драйвер для подключения к базе данных)
  63. Во-вторых, база данных
  64. подводить итоги

MySQL — How to fix the ‘Incorrect string value’ error

Posted on Dec 15, 2021

Learn how to fix MySQL ‘Incorrect string value’ ERROR 1366 when inserting new data

When you try to insert a new record into your MySQL database table, you may encounter an error saying Incorrect string value along with some UTF-8 hex code for the description.

For example, suppose you create a Test table with only one column as follows:

Next, let’s insert the following Egyptian hieroglyph character into the table:

Your MySQL server may respond with the following error:

The error above is because the character 𓀀 requires 4-bytes to be represented in UTF-8 encoding.

By default, MySQL databases and tables are created using a UTF-8 with 3-bytes encoding. You can see the encoding used for your table by using the SHOW CREATE TABLE statement as follows:

Here’s the result from my computer:

As you can see, the table uses the DEFAULT CHARSET=utf8mb3 and the names column uses CHARACTER SET utf8 .

The MySQL utf8 or utf8mb3 can’t store string values that contain a UTF-8 4-bytes character.

To store the values, you need to use the utf8mb4 character set.

Here’s the query to alter your database, table, or column to utf8mb4 character set:

When you change the character set on the database level, then any new table you create for that database in the future will use that character set as the default encoding.

Returning to the Test table, you can alter just the names column to make the INSERT statement works:

Now you should be able to insert the character 𓁴 into the table:

By default, MySQL version 8 should use utf8mb4 encoding and collation for your databases. If you see utf8 or utf8mb3 , then you might be using MySQL version below 8 (MySQL version 5 may default to utf8mb3 ).

When you encounter this error, pay attention to the characters that you want to insert into the database.

They may look like normal characters, but if you copy and paste them from some source, then they may have a strange encoding attached to them.

For example, the GOTHIC LETTER SAUIL 𐍃 looks like a normal capital S but actually a 4-bytes character:

Alternatively, you can also pass the hex code ( xF0x90x8Dx83 in the example above) into Google to look for the exact character that causes the error.

To conclude, the ERROR 1366: Incorrect string value happens when MySQL can’t insert the value you specified into the table because of incompatible encoding.

You need to modify or remove characters that have 4-bytes UTF-8 encoding, or you can change the encoding and collation used by MySQL.

Note that utf8 in MySQL always refers to utf8mb3 .

To use the 4-bytes UTF-8 encoding, it needs to be specified as utf8mb4 .

With this information, you should now be able to resolve this error. Feel free to use the provided ALTER statements above if you need it 👍

Level up your programming skills

I’m sending out an occasional email with the latest programming tutorials. Drop your email in the box below and I’ll send new stuff straight into your inbox!

About

Nathan Sebhastian is a software engineer with a passion for writing tech tutorials.
Learn JavaScript and other web development technology concepts through easy-to-understand explanations written in plain English.

Источник

Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

#1 16.01.2017 17:05:48

ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Здравствуйте,
столкнулся вот с такой проблемой при вставке данных в базу
скриншот
http://prntscr.com/dwblxt
Я так полагаю это из-за символов которые я выделил

Не в сети 15.06.2016

#2 16.01.2017 19:03:01

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Вопрос решён переводом поля в тип BLOB

Не в сети 15.06.2016

#3 16.01.2017 19:13:07

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

если дело в юникодных символах значит скорее всего в базе, на таблице или на соединении выбрана кодировка отличная от utf8. blob – не решение, а большая неприятность, которая однажды непременно напомнит о себе

Не в сети 19.02.2015

#4 16.01.2017 19:29:58

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

В таблице стоит utf8_unicode_ci
соединение тоже utf-8

Подскажите, а почему проблема, что там может быть такого. Это описание товара, поиск там не нужен, просто вывод информации.
Такая ошибка при импорте из страницы html в базу, исходный код донора тоже под utf-8

Не в сети 15.06.2016

#5 17.01.2017 08:13:20

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

это только настройки соединения. кодировка ещё указывается при создании базы и при создании таблицы. у отдельного поля тоже может быть своя кодировка. можно сдампить только схему базы с помощью mysqldump —no-data dbname и посмотреть подробности

Не в сети 19.02.2015

#6 17.01.2017 15:53:33

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Сдампил, только поле blob пока не трогал, в конце есть поле tmp_field, текущее поле блоб было аналогичным

Не в сети 15.06.2016

#7 17.01.2017 16:15:03

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

ну вроде всё правильно. ещё вопрос — когда была ошибка тип поля в миграции был string или text? потому что string — это varchar и по умолчанию ларавель ставит длину 255, а текст явно длиннее. последние версии mysql в плане запросов строже и может быть вместо обрезания строк выдают ошибку.

Не в сети 19.02.2015

#8 17.01.2017 16:18:55

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Вот так выглядела начальная миграция, поле типа text
видимо всё таки в тексте есть символы не поддерживаемые таким типом поля, если вы посмотрите на скриншот в начале, то увидите там что то вроде иконок которые на самом деле не картинки а символы. Видимо без этого типа поля не обойтись

Не в сети 15.06.2016

#9 17.01.2017 16:59:54

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

не факт. это могут быть как уникодные символы и тогда в utf8 они должны прекрасно сохраняться, либо это вообще html — он мог при выводе в браузер отобразиться как html а не текст. ещё вариант — что mysql старой версии. вообще конечно такого быть не должно, надо смотреть что именно он пытался сохранить в поле — в логах ларавеля в storage/logs можно посмотреть текстовую версию сообщения об ошибке

Не в сети 19.02.2015

#10 17.01.2017 18:11:54

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Next IlluminateDatabaseQueryException: SQLSTATE[HY000]: General error: 1366 Incorrect string value: ‘xF0x9Fx9Ax8C xD0. ‘ for column ‘description’ at row 1 (SQL: insert into `catalog` (`author_id`, `category_id`, `description`, `image`, `it_category`, `name`, `price`) values (377209367, 8223, Размер 42 — 44
Материал: бархат
Посмотреть платье в живую и примерить можно в шоу-руме в Абакане

✏Я нахожусь в шоу-руме не всегда, поэтому предварительно напишите мне сюда (хотя бы часа за 2 до посещения) ➡ https://vk.com/
— Или позвоните 8-

? Как нас найти: https://vk.com/topic-
? Режим работы: https://vk.com/topic-, https://pp.vk.me/c638327/, 0, Платье из бархата, 1860), (377209367, 8223, Размер 42 — 44
Материал: трикотаж
Посмотреть платье в живую и примерить можно в шоу-руме в

Не в сети 15.06.2016

#11 17.01.2017 18:15:54

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Вот так это видно в блокноте Notepad http://prntscr.com/dwsp5l

Не в сети 15.06.2016

#12 18.01.2017 07:46:33

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

похоже всё дело в том что mysql считает за utf8. вот тут есть решение http://stackoverflow.com/questions/1095 … l-via-jdbc – использовать кодировку utf8mb4. xF0x9Fx9Ax8C — вероятно 4-хбайтный utf-символ а в mysql utf8 позволяет только максимум трёхбайтовые. поменять видимо надо как в настройках соединения так и в настройках самого поля (можно сделать через пхпмайадмин). версия mysql должна быть не ниже 5.5

Не в сети 19.02.2015

#13 18.01.2017 18:32:58

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Спасибо за уделённое время.
Вообще приятно находится на этом форуме ))

Источник

Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

#1 16.01.2017 17:05:48

ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Здравствуйте,
столкнулся вот с такой проблемой при вставке данных в базу
скриншот
http://prntscr.com/dwblxt
Я так полагаю это из-за символов которые я выделил

Не в сети 15.06.2016

#2 16.01.2017 19:03:01

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Вопрос решён переводом поля в тип BLOB

Не в сети 15.06.2016

#3 16.01.2017 19:13:07

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

если дело в юникодных символах значит скорее всего в базе, на таблице или на соединении выбрана кодировка отличная от utf8. blob – не решение, а большая неприятность, которая однажды непременно напомнит о себе

Не в сети 19.02.2015

#4 16.01.2017 19:29:58

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

В таблице стоит utf8_unicode_ci
соединение тоже utf-8

Подскажите, а почему проблема, что там может быть такого. Это описание товара, поиск там не нужен, просто вывод информации.
Такая ошибка при импорте из страницы html в базу, исходный код донора тоже под utf-8

Не в сети 15.06.2016

#5 17.01.2017 08:13:20

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

это только настройки соединения. кодировка ещё указывается при создании базы и при создании таблицы. у отдельного поля тоже может быть своя кодировка. можно сдампить только схему базы с помощью mysqldump —no-data dbname и посмотреть подробности

Не в сети 19.02.2015

#6 17.01.2017 15:53:33

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Сдампил, только поле blob пока не трогал, в конце есть поле tmp_field, текущее поле блоб было аналогичным

Не в сети 15.06.2016

#7 17.01.2017 16:15:03

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

ну вроде всё правильно. ещё вопрос — когда была ошибка тип поля в миграции был string или text? потому что string — это varchar и по умолчанию ларавель ставит длину 255, а текст явно длиннее. последние версии mysql в плане запросов строже и может быть вместо обрезания строк выдают ошибку.

Не в сети 19.02.2015

#8 17.01.2017 16:18:55

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Вот так выглядела начальная миграция, поле типа text
видимо всё таки в тексте есть символы не поддерживаемые таким типом поля, если вы посмотрите на скриншот в начале, то увидите там что то вроде иконок которые на самом деле не картинки а символы. Видимо без этого типа поля не обойтись

Не в сети 15.06.2016

#9 17.01.2017 16:59:54

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

не факт. это могут быть как уникодные символы и тогда в utf8 они должны прекрасно сохраняться, либо это вообще html — он мог при выводе в браузер отобразиться как html а не текст. ещё вариант — что mysql старой версии. вообще конечно такого быть не должно, надо смотреть что именно он пытался сохранить в поле — в логах ларавеля в storage/logs можно посмотреть текстовую версию сообщения об ошибке

Не в сети 19.02.2015

#10 17.01.2017 18:11:54

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Next IlluminateDatabaseQueryException: SQLSTATE[HY000]: General error: 1366 Incorrect string value: ‘xF0x9Fx9Ax8C xD0. ‘ for column ‘description’ at row 1 (SQL: insert into `catalog` (`author_id`, `category_id`, `description`, `image`, `it_category`, `name`, `price`) values (377209367, 8223, Размер 42 — 44
Материал: бархат
Посмотреть платье в живую и примерить можно в шоу-руме в Абакане

✏Я нахожусь в шоу-руме не всегда, поэтому предварительно напишите мне сюда (хотя бы часа за 2 до посещения) ➡ https://vk.com/
— Или позвоните 8-

? Как нас найти: https://vk.com/topic-
? Режим работы: https://vk.com/topic-, https://pp.vk.me/c638327/, 0, Платье из бархата, 1860), (377209367, 8223, Размер 42 — 44
Материал: трикотаж
Посмотреть платье в живую и примерить можно в шоу-руме в

Не в сети 15.06.2016

#11 17.01.2017 18:15:54

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Вот так это видно в блокноте Notepad http://prntscr.com/dwsp5l

Не в сети 15.06.2016

#12 18.01.2017 07:46:33

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

похоже всё дело в том что mysql считает за utf8. вот тут есть решение http://stackoverflow.com/questions/1095 … l-via-jdbc – использовать кодировку utf8mb4. xF0x9Fx9Ax8C — вероятно 4-хбайтный utf-символ а в mysql utf8 позволяет только максимум трёхбайтовые. поменять видимо надо как в настройках соединения так и в настройках самого поля (можно сделать через пхпмайадмин). версия mysql должна быть не ниже 5.5

Не в сети 19.02.2015

#13 18.01.2017 18:32:58

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Спасибо за уделённое время.
Вообще приятно находится на этом форуме ))

Источник

Русские Блоги

Решена проблема ошибки 1366: неверное строковое значение, то есть эмодзи нельзя вставить в базу данных Mysql

предисловие

Ошибка: Ошибка 1366: Неверное строковое значение

Анализ: настройка кодировки набора символов не соответствует содержимому, которое нужно вставить

Кодировка набора символов существует в двух местах

Во-вторых, код (диск для подключения к базе данных)

Большинство людей обращают внимание только на кодировку на уровне базы данных и забывают, что кодировка набора символов также требуется при подключении к базе данных с помощью кода.

Позвольте мне представить, как изменить кодировку набора символов этих двух мест

текст

1. Код (Драйвер для подключения к базе данных)

Это вопрос, который часто упускают из виду люди (я обычно тратил 2 дня на эту проблему, искал бесчисленное количество информации, но ничего не нашел и, наконец, обнаружил проблему случайно)

Используете ли вы Java, Python, Go или другие языки высокого уровня, если вы хотите управлять базой данных, вам нужен драйвер базы данных.

Затем будут некоторые конфигурации. Я представляю здесь конфигурацию драйвера языка Go для подключения к Mysql, как показано ниже:

На самом деле, вышесказанное является полным предложением root:[email protected](localhost:3306)/local_db?charset=utf8mb4 Чтобы облегчить модификацию, я ее разобрал. Мы часто устанавливаем значение utf8 в конце и часто игнорируем это, что делает невозможным использование кода для вставки выражений эмодзи👿! Просто измените его на utf8mb4.

Во-вторых, база данных

По этому вопросу существует множество учебных пособий, в целом, существует четыре уровня кодирования базы данных.

1. Чтобы изменить кодировку сервера базы данных, вам нужно изменить конфигурационный файл my.ini

Обычно Windows находится в каталоге C: ProgramData MySQL MySQL Server 5.7.

Linux обычно находится в /etc/my.cnf или /etc/mysql/my.cnf

Примерно в 65 строках my.ini будет предложение конфигурации, default-character-set = utf8, измените его на default-character-set = utf8mb4 и сохраните его, а затем раскомментируйте. Обратите внимание, что некоторые люди в Интернете говорят, что он должен быть под mysqld Он также настроен, фактически он не используется, по крайней мере, Mysql5.7 не используется, в противном случае, если вы настроите больше, служба базы данных может не перезапуститься.

Конечно, если ваша конфигурация по умолчанию находится под mysqld, то измените конфигурацию под mysqld. Одним словом, эта конфигурация предложения нуждается только в одном предложении.

Измененные и сохраненные результаты следующие:

После изменения конфигурации вам необходимо перезапустить сервер Mysql.

Windows может найти сервис в диспетчере задач, соответствующий Mysql57, щелкнуть правой кнопкой мыши для перезапуска.

Чтобы перезапустить Mysql в Linux, вам нужно использовать команду service mysql restart. Если эта команда не работает, вы можете попробовать перезапустить службу mysqld.

2. Библиотека

Вы можете использовать Navicat, щелкнуть правой кнопкой мыши имя библиотеки и выбрать «Редактировать базу данных».

Вы также можете использовать команду:

Затем установите соответствующий набор символов в utf8mb4

3. Стол

В настоящее время я не нашел набор символов визуальной операции для изменения таблицы, только с помощью команды

4. Поле

Поля можно щелкнуть правой кнопкой мыши в таблице дизайна таблицы Navicat

Конечно, вы также можете использовать команду:

Если ваше поле имеет тип varchar или другие типы символов, вы можете выбрать соответствующий набор символов ниже

подводить итоги

Мы склонны игнорировать некоторые незначительные детали, но иногда именно эти детали разрушают все здание!

Источник

#1 16.01.2017 17:05:48

ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Здравствуйте,
столкнулся вот с такой проблемой при вставке данных в базу
скриншот
http://prntscr.com/dwblxt
Я так полагаю это из-за символов которые я выделил

#2 16.01.2017 19:03:01

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Вопрос решён переводом поля в тип BLOB

#3 16.01.2017 19:13:07

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

если дело в юникодных символах значит скорее всего в базе, на таблице или на соединении выбрана кодировка отличная от utf8. blob – не решение, а большая неприятность, которая однажды непременно напомнит о себе

#4 16.01.2017 19:29:58

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

В таблице стоит utf8_unicode_ci
соединение тоже utf-8

'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],

Подскажите, а почему проблема, что там может быть такого. Это описание товара, поиск там не нужен, просто вывод информации.
Такая ошибка при импорте из страницы html в базу, исходный код донора тоже под utf-8

#5 17.01.2017 08:13:20

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

это только настройки соединения. кодировка ещё указывается при создании базы и при создании таблицы. у отдельного поля тоже может быть своя кодировка. можно сдампить только схему базы с помощью mysqldump —no-data dbname и посмотреть подробности

#6 17.01.2017 15:53:33

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Сдампил, только поле blob пока не трогал, в конце есть поле tmp_field, текущее поле блоб было аналогичным

CREATE TABLE `catalog` (
  `id` int(10) UNSIGNED NOT NULL,
  `author_id` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `description` blob,
  `price` decimal(10,2) DEFAULT '0.00',
  `it_category` int(11) NOT NULL DEFAULT '0',
  `category_id` int(11) NOT NULL DEFAULT '0',
  `balance` int(11) NOT NULL DEFAULT '0',
  `my_sorting` int(11) NOT NULL DEFAULT '0',
  `image` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `tmp_field` text COLLATE utf8_unicode_ci
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

#7 17.01.2017 16:15:03

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

ну вроде всё правильно. ещё вопрос — когда была ошибка тип поля в миграции был string или text? потому что string — это varchar и по умолчанию ларавель ставит длину 255, а текст явно длиннее. последние версии mysql в плане запросов строже и может быть вместо обрезания строк выдают ошибку.

#8 17.01.2017 16:18:55

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

public function up()
    {
        Schema::create('catalog', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('author_id');
            $table->string('name')->nullable();
            $table->text('description')->nullable();
            $table->decimal('price', 8, 2)->nullable();
            $table->integer('it_group')->default(0);
            $table->integer('group_id')->default(0);
            $table->integer('balance')->default(0);
            $table->integer('my_sorting')->default(0);
            $table->timestamps();
        });
    }

Вот так выглядела начальная миграция, поле типа text
видимо всё таки в тексте есть символы не поддерживаемые таким типом поля, если вы посмотрите на скриншот в начале, то увидите там что то вроде иконок которые на самом деле не картинки а символы. Видимо без этого типа поля не обойтись

#9 17.01.2017 16:59:54

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

не факт. это могут быть как уникодные символы и тогда в utf8 они должны прекрасно сохраняться, либо это вообще html — он мог при выводе в браузер отобразиться как html а не текст. ещё вариант — что mysql старой версии. вообще конечно такого быть не должно, надо смотреть что именно он пытался сохранить в поле — в логах ларавеля в storage/logs можно посмотреть текстовую версию сообщения об ошибке

#10 17.01.2017 18:11:54

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Next IlluminateDatabaseQueryException: SQLSTATE[HY000]: General error: 1366 Incorrect string value: ‘xF0x9Fx9Ax8C xD0…’ for column ‘description’ at row 1 (SQL: insert into `catalog` (`author_id`, `category_id`, `description`, `image`, `it_category`, `name`, `price`) values (377209367, 8223, Размер 42 — 44
Материал: бархат
Посмотреть платье в живую и примерить можно в шоу-руме в Абакане

✏Я нахожусь в шоу-руме не всегда, поэтому предварительно напишите мне сюда (хотя бы часа за 2 до посещения) ➡ https://vk.com/
— Или позвоните 8-

? Как нас найти: https://vk.com/topic-
? Режим работы: https://vk.com/topic-, https://pp.vk.me/c638327/, 0, Платье из бархата, 1860), (377209367, 8223, Размер 42 — 44
Материал: трикотаж
Посмотреть платье в живую и примерить можно в шоу-руме в

#11 17.01.2017 18:15:54

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Вот так это видно в блокноте Notepad http://prntscr.com/dwsp5l

#12 18.01.2017 07:46:33

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

похоже всё дело в том что mysql считает за utf8. вот тут есть решение http://stackoverflow.com/questions/1095 … l-via-jdbc – использовать кодировку utf8mb4. xF0x9Fx9Ax8C — вероятно 4-хбайтный utf-символ а в mysql utf8 позволяет только максимум трёхбайтовые. поменять видимо надо как в настройках соединения так и в настройках самого поля (можно сделать через пхпмайадмин). версия mysql должна быть не ниже 5.5

#13 18.01.2017 18:32:58

Re: ORM — SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Спасибо за уделённое время.
Вообще приятно находится на этом форуме ))

Сегодня зачищал PDOException: SQLSTATE: General error: 1366. Происходила ошибка при записи в базу UTF строк, содержащих неизвестные базе данных UTF символы. По логам было ясно, что и куда пытается сохранить программа.

Путей решения маячило целых два:

  • «научить» базу понимать эти символы,
  • убирать символы, вызывающие проблему.

Но сначала хотелось разобраться, чем одни UTF символы отличаются от других. Я не вдавался в подробности того как кодируется UTF, какие они бывают.

Оказалось, что UTF содержит символы, кодируемые последовательностью от 1 до 4 байт. Вот как они шифруются в бинарном коде:

0xxxxxxx  

110xxxxx 10xxxxxx

1110xxxx 10xxxxxx 10xxxxxx

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

В моем случае проблемы с базой вызвали 4х байтные символы.

«Учим» базу

Можно поменять тип поля на BLOB, чтобы база не производила проверку валидности UTF. А можно проверить всю цепочку соединения с базой, чтобы переключиться на поддержку кодировки utf8mb4.

Лично мне, вся эта псевдографика, которая засунута в 4х-байтные таблицы utf, совершенна не нужна, потому я пойду вторым путем.

Убираем 4х-байтные символы UTF из текста

Для PHP получился вот такой шаблон для замены:

//удалить 4х-байтные символы UTF

$text = preg_replace(«/[xf0-xf7][x80-xbf]{3}/», » «, $text);

Если вдруг понадобится «почикать» 3х байтные, вот пример регулярного выражения и для него:

//удалить 3х-байтные символы UTF

$text = preg_replace(«/[xe0-xef][x80-xbf]{2}/», » «, $text);

Написать комментарий


Данная запись опубликована в 22.03.2017 19:26 и размещена в Программирование.
Вы можете перейти в конец страницы и оставить ваш комментарий.

Мало букафф? Читайте есчо !

При переносе очередного сайта и разворачивание его на VDS-ке, у меня появилась ошибка:

MySQL Query Error: [[1366] Incorrect string value: ‘xB1NxC30x10xFD…’ for column ‘COOKIES’ at row 1]

Она была связана с тем, что не получалось сохраненить в БД куки из-за того что кодировка из скрипта не совпадала с кодировкой в БД.

Что бы это исправить, необходимо сменить кодировку в БД и определить эту кодировку в скриптах битрикса для подключения с базой данных. Т.к. ошибка может возникать из-за того, что пытается записать в БД символы, которые состоят не из 3 байтов, как в UTF-8, а из 4-х, то для хранения поля необходимо использовать utf8mb4. Поменять кодировку можно с помощью скрипта php:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

<?php

$dbName = ‘YOUR_DB_NAME’;

$user = ‘YOUR_USER_NAME’;

$password = ‘YOUR_PASSWORD’;

$dsn = ‘mysql:dbname=’.$dbName.‘;host=localhost’;

$time_n=time();

try {

    $dbh = new PDO($dsn, $user, $password);

} catch (PDOException $e) {

    exit(‘Подключение не удалось: ‘ . $e->getMessage());

}

$sql = «SELECT distinct CONCAT( ‘alter table ‘, TABLE_SCHEMA, ‘.’, TABLE_NAME, ‘ CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;’ ) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ‘$dbName’;»;

$arErrors = [];

$cnt = 0;

foreach ($dbh->query($sql) as $row) {

    try {

        $dbh->exec($row[0]);

    } catch (PDOException $e) {

        $arErrors[] = ‘Ошибка: ‘ . $e->getMessage();

    }

    $cnt++;

}

$time_k=time();

echo ‘Затронуто таблиц: ‘ . $cnt . ‘ Из них с ошибками: ‘ . count($arErrors) . ‘<br>’;

echo ‘Время выполнения: ‘ . strftime(‘%M:%S’,$time_k$time_n) . ‘<br>’;

if (count($arErrors) > 0) {

    echo ‘Список ошибок: <br>’;

    echo ‘<pre>’;

    print_r($arErrors);

    echo ‘</pre>’;

}

Результат выполнения скрипта:

Затем в конфигах битрикса прописать:
— в файле bitrix/php_interface/after_connect_d7.php:

$connection = BitrixMainApplication::getConnection();

$connection->queryExecute(«SET NAMES ‘utf8′»);

$connection->queryExecute(‘SET collation_connection = «utf8mb4_unicode_ci»‘);

— в файле bitrix/php_interface/after_connect.php:

$DB->Query(«SET NAMES ‘utf8′»);

$DB->Query(‘SET collation_connection = «utf8mb4_unicode_ci»‘);

После, если система заработает, следеут сделать проверку системы:

Bitrix проверка системы
Если будут ошибки, то исправить их следуя подсказкам битрикса.

Если же ошибка не исправилась, значит необходимо поиграться с вариантами кодировки. В моем случае эти действия помогли, но не с первого раза. По итогу оставил кодировку utf8 и utf8_unicode_ci, и она чудо образом стала работать. Почему до этого выпадала ошибка, для меня осталось загадкой 🙂

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

1 2010-02-17 23:34:41

  • Kaanr
  • Редкий гость
  • Неактивен
  • Зарегистрирован: 2010-02-17
  • Сообщений: 3

Тема: ОШИБКА #1366 — Incorrect string value: ‘xC2xC0xD

Добре время суток!
Помогите, пожалуйста))
Проблема: появляется сообщение #1366 — Incorrect string value: ‘xC2xC0xD4xC2xC0’ for column ‘name’ at row 1
при выполнении запроса
INSERT INTO categories (name,file) VALUES («ВАФВА»,1);

Данный запрос выполняю в PhpMyAdmin.

Вот мои таблицы:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
— phpMyAdmin SQL Dump
— version 3.2.5
— http://www.phpmyadmin.net

— Хост: localhost
— Время создания: Фев 17 2010 г., 23:29
— Версия сервера: 5.1.40
— Версия PHP: 5.2.11

SET SQL_MODE=»NO_AUTO_VALUE_ON_ZERO»;


— База данных: `site`

— ———————————————————


— Структура таблицы `categories`

CREATE TABLE IF NOT EXISTS `categories` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `file` tinyint(1) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `namefile` (`name`,`file`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1250 AUTO_INCREMENT=1 ;

— ———————————————————


— Структура таблицы `items`

CREATE TABLE IF NOT EXISTS `items` (
  `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `author` varchar(30) NOT NULL,
  `name` varchar(60) NOT NULL,
  `added` date NOT NULL,
  `href` varchar(255) NOT NULL,
  `catid` smallint(5) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `added` (`added`),
  KEY `catid` (`catid`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1250 AUTO_INCREMENT=1 ;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SHOW GLOBAL VARIABLES LIKE ‘CHAR%’;
character_set_client    cp1251
character_set_connection    cp1251
character_set_database    cp1251
character_set_filesystem    binary
character_set_results    cp1251
character_set_server    cp1251
character_set_system    utf8
character_sets_dir    C:webMySQL Server 5.1sharecharsets

SHOW VARIABLES LIKE ‘char%’
character_set_client    utf8
character_set_connection    cp1251
character_set_database    cp1251
character_set_filesystem    binary
character_set_results    utf8
character_set_server    cp1251
character_set_system    utf8
character_sets_dir    C:webMySQL Server 5.1sharecharsets

Почему ошибка выскакивает?
В БД 2 таблицы, пустые, без данных.

2 Ответ от Hanut 2010-02-18 00:48:27

  • Hanut
  • Hanut
  • Модератор
  • Неактивен
  • Откуда: Рига, Латвия
  • Зарегистрирован: 2006-07-02
  • Сообщений: 9,723

Re: ОШИБКА #1366 — Incorrect string value: ‘xC2xC0xD

DEFAULT CHARSET=cp1250 — Здесь ошибка. Необходимо исправить кодировку таблиц на cp1251.

Проследите также, чтобы файл скрипта был в ANSI, не в UTF8. Это можно посмотреть практически в любом текстовом редакторе, например в Notepad++.

3 Ответ от Kaanr 2010-02-18 11:47:34

  • Kaanr
  • Редкий гость
  • Неактивен
  • Зарегистрирован: 2010-02-17
  • Сообщений: 3

Re: ОШИБКА #1366 — Incorrect string value: ‘xC2xC0xD

Hanut сказал:

DEFAULT CHARSET=cp1250 — Здесь ошибка. Необходимо исправить кодировку таблиц на cp1251.

Проследите также, чтобы файл скрипта был в ANSI, не в UTF8. Это можно посмотреть практически в любом текстовом редакторе, например в Notepad++.

Спасибо за отклик!))
Hanut,
подскажите, пожалуйста, мне как новичку )))

Я правильно понимаю, что кодировка таблиц это то, что указано в поле «Сравнение» в PhpMyAdmin?
Или не правильно?

Этот запрос я пишу не в файле, а в поле на странице SQL в PhpMyAdmin ))

По поводу кодировки, я зашел под rootом, выбрал БД, выбрал закладку Операции и в низу окна в раскрывающемся списке «Сравнение» выбрал cp_1251_general_cs.
Потом под другим пользователем выполнил запрос INSERT INTO …. — результат тот же )))

4 Ответ от Hanut 2010-02-18 12:18:40

  • Hanut
  • Hanut
  • Модератор
  • Неактивен
  • Откуда: Рига, Латвия
  • Зарегистрирован: 2006-07-02
  • Сообщений: 9,723

Re: ОШИБКА #1366 — Incorrect string value: ‘xC2xC0xD

Kaanr
У MySQL есть кодировки уровня базы данных, таблиц и даже отдельных полей.

Сравнение — это частный вид кодировки. cp1251 — это в сравнении кодировка, а все, что дальше general_ci — это уже сравнение (в данном случае регистронезависимое).

Вы поменяли изначальное сравнение БД, теперь каждая вновь создаваемая таблица будет иметь установленное вами сравнение. Необходимо поменять также сравнение уровня таблиц. Перед сменой сравнения желательно очистить таблицы.

5 Ответ от Kaanr 2010-02-18 12:54:12

  • Kaanr
  • Редкий гость
  • Неактивен
  • Зарегистрирован: 2010-02-17
  • Сообщений: 3

Re: ОШИБКА #1366 — Incorrect string value: ‘xC2xC0xD

Hanut сказал:

Kaanr
У MySQL есть кодировки уровня базы данных, таблиц и даже отдельных полей.

Сравнение — это частный вид кодировки. cp1251 — это в сравнении кодировка, а все, что дальше general_ci — это уже сравнение (в данном случае регистронезависимое).

Вы поменяли изначальное сравнение БД, теперь каждая вновь создаваемая таблица будет иметь установленное вами сравнение. Необходимо поменять также сравнение уровня таблиц. Перед сменой сравнения желательно очистить таблицы.

Вроде я нашел ошибку. Вот здесь она:
CREATE TABLE IF NOT EXISTS `categories` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) CHARACTER SET cp1250 NOT NULL,
  `file` tinyint(1) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `namefile` (`name`,`file`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
Вероятно, я не изменил кодировку еще и для поля))))
Я для таблицы изменил, а для полей походу нет))))

6 Ответ от Evgenius 2011-04-11 13:25:12

  • Evgenius
  • Новичок
  • Неактивен
  • Зарегистрирован: 2011-04-11
  • Сообщений: 1

Re: ОШИБКА #1366 — Incorrect string value: ‘xC2xC0xD

Kaanr сказал:

Hanut сказал:

Kaanr
У MySQL есть кодировки уровня базы данных, таблиц и даже отдельных полей.

Сравнение — это частный вид кодировки. cp1251 — это в сравнении кодировка, а все, что дальше general_ci — это уже сравнение (в данном случае регистронезависимое).

Вы поменяли изначальное сравнение БД, теперь каждая вновь создаваемая таблица будет иметь установленное вами сравнение. Необходимо поменять также сравнение уровня таблиц. Перед сменой сравнения желательно очистить таблицы.

Вроде я нашел ошибку. Вот здесь она:
CREATE TABLE IF NOT EXISTS `categories` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) CHARACTER SET cp1250 NOT NULL,
  `file` tinyint(1) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `namefile` (`name`,`file`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
Вероятно, я не изменил кодировку еще и для поля))))
Я для таблицы изменил, а для полей походу нет))))

Тоже было такое. В одном поле таблицы указал cp1251, а в другом cp1250. Потом русские буквы стали ??????.
Теперь ошибку исправил. Спасибо, помог твой пост.

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Понравилась статья? Поделить с друзьями:
  • Error 1362 updating of new row is not allowed in after trigger
  • Error 1362 mysql
  • Error 1355 windows описание
  • Error 135 fan failure
  • Error 1348 hy000 column password is not updatable