sql >> Databasteknik >  >> RDS >> Mysql

Klipp automatiskt strängar till rätt längd på insatsen

MySQL trunkerar faktiskt strängar till kolumnbredden som standard. Den genererar en varning, men tillåter insättningen.

mysql> create table foo (str varchar(10));
mysql> insert into foo values ('abcdefghijklmnopqrstuvwxyz');
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> show warnings;
+---------+------+------------------------------------------+
| Level   | Code | Message                                  |
+---------+------+------------------------------------------+
| Warning | 1265 | Data truncated for column 'str' at row 1 | 
+---------+------+------------------------------------------+
mysql> select * from foo;
+------------+
| str        |
+------------+
| abcdefghij | 
+------------+

Om du ställer in det strikta SQL-läget förvandlar det varningen till ett fel och avvisar infogningen.

Angående din kommentar:SQL-läge är en MySQL-serverkonfiguration. Det är förmodligen inte PDO som orsakar det, men å andra sidan är det möjligt eftersom vilken klient som helst kan ställa in SQL-läge för sin session.

Du kan hämta det aktuella globala värdet eller session sql_mode med följande satser:

SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;

Standard bör vara en tom sträng (inga lägen inställda). Du kan ställa in SQL-läge i din my.cnf fil, med --sql-mode alternativ för mysqld, eller använda en SET uttalande.

Uppdatering:MySQL 5.7 och senare ställer in strikt läge som standard. Se https://dev.mysql.com/doc/ refman/5.7/en/sql-mode.html



  1. Förstå Big Data Analytics

  2. Proaktiv MySQL-övervakning (Developer Studio/Advisors Angle)

  3. Enkel underfråga med OuterRef

  4. Är det möjligt att radera allt efter ett "mellanslag" i MySQL-fältet?