Como un artículo anterior este viene de la mano de ^Tifa^ y como su descubridora todos los méritos a su persona.
El escenario
Como se aprecia ni se actualiza ni se borra...
Intentamos solucionar el tema con un alter:
Un ejemplo con varchar funcionando perfectamente
El escenario
mysql> CREATE TABLE ejemplo( -> nombres BINARY(20)); Query OK, 0 rows affected (0.39 sec) mysql> INSERT INTO ejemplo VALUES('Juan'),('Pepe'),('Jose'); Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM ejemplo; +----------------------+ | nombres | +----------------------+ | Juan | | Pepe | | Jose | +----------------------+ 3 rows IN SET (0.00 sec)
Ese es el escenario.
Ahora una actualización de datos:
mysql> UPDATE ejemplo SET nombres = 'Carlos' WHERE nombres = hex('Juan'); Query OK, 0 rows affected (0.00 sec) Rows matched: 0 Changed: 0 Warnings: 0 mysql> UPDATE ejemplo SET nombres = 'Carlos' WHERE nombres = 'Juan'; Query OK, 0 rows affected (0.00 sec) Rows matched: 0 Changed: 0 Warnings: 0 mysql> DELETE FROM ejemplo WHERE nombres = 'Pepe'; Query OK, 0 rows affected (0.00 sec) mysql> SELECT * FROM ejemplo; +----------------------+ | nombres | +----------------------+ | Juan | | Pepe | | Jose | +----------------------+ 3 rows IN SET (0.00 sec)
Como se aprecia ni se actualiza ni se borra...
Intentamos solucionar el tema con un alter:
mysql> DESCRIBE ejemplo; +---------+------------+------+-----+---------+-------+ | FIELD | Type | NULL | KEY | DEFAULT | Extra | +---------+------------+------+-----+---------+-------+ | nombres | BINARY(20) | YES | | NULL | | +---------+------------+------+-----+---------+-------+ 1 row IN SET (0.00 sec) mysql> ALTER TABLE ejemplo MODIFY nombres varchar(25); Query OK, 3 rows affected (0.45 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> UPDATE ejemplo SET nombres = 'Carlos' WHERE nombres = 'Juan'; Query OK, 0 rows affected (0.00 sec) Rows matched: 0 Changed: 0 Warnings: 0 mysql> DELETE FROM ejemplo WHERE nombres = 'Pepe'; Query OK, 0 rows affected (0.00 sec) mysql> SELECT * FROM ejemplo; +----------------------+ | nombres | +----------------------+ | Juan | | Pepe | | Jose | +----------------------+ 3 rows IN SET (0.00 sec)
ni por ahí...
Esto también se aplica también a tablas con datos tipo char, varchar,etc
si se altera a binary.
mysql> CREATE TABLE ejemplo2( -> nombres varchar(20)); Query OK, 0 rows affected (0.38 sec) mysql> INSERT INTO ejemplo2 VALUES('pepe'),('Juan'),('pedro'),('luis'); Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM ejemplo2; +---------+ | nombres | +---------+ | pepe | | Juan | | pedro | | luis | +---------+ 4 rows IN SET (0.00 sec)
Un ejemplo con varchar funcionando perfectamente
mysql> UPDATE ejemplo2 SET nombres = 'Cucu' WHERE nombres = 'pepe'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT * FROM ejemplo2; +---------+ | nombres | +---------+ | Cucu | | Juan | | pedro | | luis | +---------+ 4 rows IN SET (0.00 sec)
Ahora alteramos a Binary
mysql> ALTER TABLE ejemplo2 MODIFY nombres BINARY(20); Query OK, 4 rows affected (0.27 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM ejemplo2; +----------------------+ | nombres | +----------------------+ | Cucu | | Juan | | pedro | | luis | +----------------------+ 4 rows IN SET (0.00 sec) mysql> UPDATE ejemplo2 SET nombres = 'Marta' WHERE nombres = 'Cucu'; Query OK, 0 rows affected (0.00 sec) Rows matched: 0 Changed: 0 Warnings: 0
se jodió la tabla...
volvemos a varchar
mysql> ALTER TABLE ejemplo2 MODIFY nombres varchar(20); Query OK, 4 rows affected (0.10 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> DESCRIBE ejemplo2; +---------+-------------+------+-----+---------+-------+ | FIELD | Type | NULL | KEY | DEFAULT | Extra | +---------+-------------+------+-----+---------+-------+ | nombres | varchar(20) | YES | | NULL | | +---------+-------------+------+-----+---------+-------+ 1 row IN SET (0.00 sec) mysql> UPDATE ejemplo2 SET nombres = 'Marta' WHERE nombres = 'Cucu'; Query OK, 0 rows affected (0.00 sec) Rows matched: 0 Changed: 0 Warnings: 0 Como se aprecia gracias al Changed: 0
no se actualizaron los datos pese a su tipo varchar.
Fuente original: Mini-Bug en Mysql
De donde diablos sacas tanta info yo también quiero.......
Ubuntero