2016-07-17 6 views
1

Ich habe folgende Fehlermeldung:Lehre: Daten zu lange Spalte (durch austretendes)

Die Spalte ‚Name‘ ist 255 Zeichen lang sein, aber es scheint, dass die Ausgabe entkommen Verwirrungen es auf. Was habe ich falsch gemacht?

An exception occurred while executing 'INSERT INTO parts (deletedAt, name, code, price, in_stock) VALUES (?, ?, ?, ?, ?)' with params [null, "\x50\x6f\x73\x74\x4e\x4c\x20\x50\x72\x69\x6f\x72\x69\x74\x79\x20\x50\x61\x6b\x6b\x65\x74\x20\x41\x61\x6e\x67\x65\x74\x65\x6b\x65\x6e\x64\x20\x42\x65\x6c\x67\x69\xeb", "1101012", "12.00", 0]:

SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'name' at row 1 500 Internal Server Error - DriverException 2 linked Exceptions: PDOException » PDOException »

 foreach ($csv as $row) { #persist every part 
      $part = new Part(); 
      $part->setCode($row[0]); 
      $part->setName($row[1]); 
      $part->setPrice(preg_replace("/[^0-9.]/","", $row[2])); # extract decimal number 
      $part->setInStock(($row[3])?1:0); 

      $em = $this->getDoctrine()->getManager(); 
      $em->persist($part); 
      $count++; # get number of commits 
     } 

     $em->flush(); 

von meinem my.ini:

[client] 
port = 3306 
socket = /tmp/mysql.sock 
default-character-set = utf8mb4 

[mysql] 
default-character-set = utf8mb4 
no-auto-rehash 

[mysqld] 
port = 3306 
collation-server  = utf8mb4_unicode_ci 
init-connect   = 'SET NAMES utf8mb4' 
character-set-server = utf8mb4 
skip-character-set-client-handshake 
+0

Was meinen Sie mit Ausgabe-Escaping? Dies ist eine Symfony-Nachricht. Können Sie den Controller-Code kurz vor dem em-> flush() anzeigen? Insbesondere, was du für 'name' machst !!!! Das ist der mit all diesen Escape-Codes. –

+0

Wenn Sie wirklich versuchen, Daten mit mehr als 255 Zeichen zu persistieren (was bei Ihrer Fehlermeldung unwahrscheinlich erscheint), dann erhöhen Sie die Spaltengröße. – Cerad

+0

hat den angeforderten Code hinzugefügt. Es funktioniert, wenn ich die Zeichenfolge auf ungefähr 5 Zeichen abschneide, aber das ist offensichtlich nicht, was ich will. – bluppfisk

Antwort

1

So stellte sich heraus, es gab zwei Probleme.

Eine war, dass Doctrine nicht die Standard-Sortierung respektierte, die vom MySQL-Server festgelegt wurde, und sogar eine Vielzahl von Optionen in config.yml usw. Endlich sehe ich so aus, und ich verstehe nicht wirklich warum. Aber es funktioniert jetzt.

charset: utf8mb4 
default_table_options: 
    charset: utf8mb4 
    collate: utf8mb4_unicode_ci 
options: 
    charset: utf8mb4 
    collate: utf8mb4_unicode_ci 
    1002: "SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'" 

Zweite war, dass die Quelle der Daten, die ich versuche, in die Datenbank zu laden (eine CSV-Datei) war offenbar nicht in UTF-8. Das Speichern in "utf8" löste das Problem. Jetzt frage ich mich, wie ich den Eingang php in das gewünschte Format konvertieren kann.

Verwandte Themen