2013-08-27 21 views
21

Ho due istanze MySQL. Il primo tronca le stringhe inserite quando i dati sono troppo lunghi. Il 2 ° uno genera un errore:MySQL troppo lungo troncamento varchar/impostazione errore

ERROR 1406 (22001): Data too long for column 'xxx' at row 1

voglio il 2 ° per troncare i dati pure. Esiste qualche impostazione MySQL per gestire questo comportamento?

+1

Qual è il tipo di file e lunghezza della colonna? avete gli stessi valori, per lo stesso file su entrambi i server –

+0

@ metalfight-user868766 Non capisco la tua domanda sul tipo di file. Il motore è InnoDB, tipo di colonna: varchar. La lunghezza delle colonne non può essere modificata. E sì, i database sono quasi identici. –

+0

Che tipo di errore? – 7alhashmi

risposta

28

È possibile disattivare STRICT_TRANS_TABLES e STRICT_ALL_TABLES. Ciò consente il troncamento automatico della stringa inserita.

Citazione da Documantation MySQL.

Strict mode controls how MySQL handles invalid or missing values in data-change statements such as INSERT or UPDATE. A value can be invalid for several reasons. For example, it might have the wrong data type for the column, or it might be out of range. A value is missing when a new row to be inserted does not contain a value for a non-NULL column that has no explicit DEFAULT clause in its definition. (For a NULL column, NULL is inserted if the value is missing.)

Riferimento: MySQL Server SQL Modes

+0

questa è la risposta al mio problema anche –

+0

BTW - il metodo seguente non deve essere considerato valido - è necessario impostare la modalità sql nel my.cnf - ma non è necessario NO_AUTO_CREATE_USER o altro, devi solo assicurarti di non avere STRICT_TRANS_TABLES o STRICT_ALL_TABLES o qualsiasi altra cosa che propaga questo avviso. Infatti sql-mode = '' correggerebbe anche l'errore. – Ross

9

Se la modalità SQL rigorosa non è abilitata e si assegna un valore a una colonna CHAR o VARCHAR che supera la lunghezza massima della colonna, il valore viene troncato per adattarsi e viene generato un avviso. Per il troncamento di caratteri non spaziali, è possibile che si verifichi un errore (anziché un avviso) e sopprimere l'inserimento del valore utilizzando la modalità SQL rigorosa. Vedere la Sezione 6.1.7, "Modalità SQL Server".

Come si può cambiare: http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html


trovato due modi per disattivare la modalità rigorosa:

  1. aggiungi qui sotto per my.cnf

    sql-mode = "NO_AUTO_CREATE_USER , NO_ENGINE_SUBSTITUTION "

  2. modo sta usando la console mysql.

    SET @@ global.sql_mode = '';

Si prega di testarli prima di correre in ambiente di produzione.

+0

SET @@ global.sql_mode = ''; ha funzionato come un fascino –

1

se si utilizza cPanel,

sostituire

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 

in /usr/my.cnf

a

sql-mode="" 

corsa

/etc/init.d/mysql restart