sql >> Database teknologi >  >> RDS >> Mysql

Klip automatisk strenge til den rigtige længde på indsatsen

Faktisk afkorter MySQL strenge til kolonnebredden som standard. Den genererer en advarsel, men tillader indsatsen.

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 | 
+------------+

Hvis du indstiller den strenge SQL-tilstand, forvandler den advarslen til en fejl og afviser indsættelsen.

Til din kommentar:SQL-tilstand er en MySQL Server-konfiguration. Det er sandsynligvis ikke PDO, der forårsager det, men på den anden side er det muligt, fordi enhver klient kan indstille SQL-tilstand for sin session.

Du kan hente den aktuelle globale eller session sql_mode værdi med følgende udsagn:

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

Standarden skal være en tom streng (ingen tilstande angivet). Du kan indstille SQL-tilstand i din my.cnf fil, med --sql-mode mulighed for mysqld eller ved at bruge et SET erklæring.

Opdatering:MySQL 5.7 og nyere indstiller streng tilstand som standard. Se https://dev.mysql.com/doc/ refman/5.7/da/sql-mode.html



  1. Opret en funktion med valgfri argumenter i MySQL

  2. SIN() Eksempler i SQL Server

  3. IN-klausul bruger ikke indeks

  4. SQL Server Linked Server Eksempel forespørgsel