Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [mysql] Errore 'Data too long in column..'

    [MySQL] errore "data too long for column"

    Ciao a tuti!! ho trasferito un mio sito da un provider ad un altro (da SITEGROUND ad A2HOSTING percchè ha il supporto per PHP 5.1.6 e MySQL 5). Da phpMyAdmin ho fatto un backup del db in UTF8 per trasferirlo nel nuovo sito, ma quando dal nuovo phpMyAdmin faccio IMPORTA ricevo sempre l'errore #1406 - Data too long for column 'Name' at row 1 .
    Da quel che vedo l'errore è dovuto a delle lettere accentate...è un bug di MySQL o di phpMyAdmin? mah...

  2. #2
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,031
    è un bug? lettere accentate? dove?

  3. #3
    ad esempio questo che mi da phpmyadmin:

    query SQL:

    INSERT INTO `categories`
    VALUES ( 110, 1962, 'Coppa Nazionale Regolarit� Italia', 4, NULL , 2, NULL , NULL ) ;

    Messaggio di MySQL: Documentazione
    #1406 - Data too long for column 'Name' at row 1

    la colonna 'Name' è quella con 'Coppa Nazionale Regolarit� Italia' e come si vede al posto del ? dovrebbe esserci una a accentata (à)

  4. #4
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,031
    aldilà della a accentata credo proprio che "data too long" indichi che il valore che stai tentando di inserire è troppo lungo per il campo che lo deve ospitare...

  5. #5
    trovato la soluzione del problema, ed era legata proprio alla variabile accentata!
    Tanto se gli altri sono interessati alla cosa..
    I dati nel mio dump di phpmyadmin era in UTF-8, cioè in pratica UNICODE: un sistema che va oltre i 256 caratteri tradizionali ASCII per rappresentare prue lettere in alfabeto ad esempio ebraico, cirillico ecc ecc.
    Per far questo UTF-8 richiede dati da almeno 2 byte, cioè invece di 256 valori avremo 256x256=65535 valori.
    All'interno di questa vasta rappresentazione ogni alfabeto è rappresentato da una codifica specifica, in MySQL da una COLLATION. Se io imposto un db mysql a UTF-8_general_ci (la forma più comune) ogni carattere dovrà appartenere ad una collation rappresentata da una sequenza numerica per la collation+il codice numerico del carattere corrispondente, qundi un valore a 2 byte!
    nel mio caso sopra detto il campo NAME aveva una lunghezza VARCHAR(100) cioè 100 byte, ma siccome il valore memorizzato è in unicode richiede due byte per contenerlo, e quindi ecco l'errore DATA TOO LONG..inserisco un valore a 2 byte in un campo a 1 byte! per cui ho dovuo cambiare il tipo di campo NAME, da VARCHAR(100) a TEXT.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.