Mysql
 sql >> Baza danych >  >> RDS >> Mysql

c# Problem z mysql :Nieprawidłowy kod wartości ciągu 1366 dla kolumny w wierszu 1

\xE4\xB8\xAD\xE6\x96\x87 jest szesnastką dla 中文 („Język chiński”).

W MySQL zadziała to z utf8 lub utf8mb4 . Jednakże, ponieważ istnieje kilka chińskich znaków, które wymagają 4 bajtów, masz rację, używając utf8mb4. Tymczasem COLLATION (np. utf8mb4_unicode_ci) nie ma znaczenia dla danego pytania.

Ważny jest zestaw znaków poszczególnych kolumn, a nie bazy danych. A kludge 191 jest potrzebny tylko w 5.5 i 5.6. Proszę podać SHOW CREATE TABLE .

Innym sposobem ustalenia parametrów połączenia jest wydanie SET NAMES utf8mb4 zaraz po podłączeniu. (Nie jest to preferowane, ale może warto spróbować. Powinno to być obejście wspomnianego problemu z Gormem.)

Czy podczas łączenia pojawia się komunikat o błędzie? Lub podczas wydawania konkretnego zapytania? Jeśli tak, podaj to zapytanie.

Sprawdź, czy skip-character-set-client-handshake nie jest używany.

Sprawdź „Najlepsze praktyki” w https://stackoverflow.com/a/38363567/1766831

Dodatki Ponieważ wspomniałeś o procedurze składowanej, sugeruję wykonanie SHOW CREATE PROCEDURE aby zobaczyć, z jakim zestawem znaków został zbudowany. Oto przykład tego, co może się wydarzyć:

mysql> SET NAMES latin1;
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE PROCEDURE x () BEGIN END ;
Query OK, 0 rows affected (0.01 sec)

mysql> SHOW CREATE PROCEDURE x \G
*************************** 1. row ***************************
           Procedure: x
            sql_mode: NO_ENGINE_SUBSTITUTION
    Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `x`()
BEGIN END
character_set_client: latin1
collation_connection: latin1_swedish_ci
  Database Collation: utf8mb4_unicode_520_ci
1 row in set (0.00 sec)

mysql> DROP PROCEDURE x;
Query OK, 0 rows affected (0.01 sec)

kontra:

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

mysql> CREATE PROCEDURE x () BEGIN END ;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW CREATE PROCEDURE x \G
*************************** 1. row ***************************
           Procedure: x
            sql_mode: NO_ENGINE_SUBSTITUTION
    Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `x`()
BEGIN END
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
  Database Collation: utf8mb4_unicode_520_ci
1 row in set (0.00 sec)

Jeśli nie widzisz utf8mb4 w swojej PROCEDURE i FUNCTION deklaracje, odbuduj je.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wyświetlić błąd MySQL w PHP dla długiego zapytania, które zależy od danych wejściowych użytkownika?

  2. Bardzo wolne (1 sekunda) połączenia

  3. mySQL ::wstawić do tabeli, dane z innej tabeli?

  4. Jaki jest najlepszy sposób dynamicznego wybierania nazwy tabeli w czasie wykonywania?

  5. Zainstaluj MySQL z ansible na ubuntu