¿Es posible aplicar la verificación de datos en MySQL utilizando la expresión regular?

Supongamos que tengo un atributo llamado número de teléfono y me gustaría aplicar cierta validez en las entradas de este campo. ¿Puedo usar expresiones regulares para este propósito, ya que la expresión regular es muy flexible en la definición de restricciones?

Sí tu puedes. MySQL admite regex ( http://dev.mysql.com/doc/refman/5.6/en/regexp.html ) y para la validación de datos debe utilizar un desencadenador ya que MySQL no admite la restricción CHECK (siempre puede pasar a PostgreSQL como alternativa:). ¡NÓTESE BIEN! Tenga en cuenta que aunque MySQL tiene una construcción de restricción CHECK, desafortunadamente MySQL (hasta el momento 5.6) no valida los datos contra las restricciones de verificación. De acuerdo con http://dev.mysql.com/doc/refman/5.6/en/create-table.html : “La cláusula CHECK es analizada pero ignorada por todos los motores de almacenamiento”.

Puede agregar una restricción de verificación para un teléfono de columna:

CREATE TABLE data ( phone varchar(100) ); DELIMITER $$ CREATE TRIGGER trig_phone_check BEFORE INSERT ON data FOR EACH ROW BEGIN IF (NEW.phone REGEXP '^(\\+?[0-9]{1,4}-)?[0-9]{3,10}$' ) = 0 THEN SIGNAL SQLSTATE '12345' SET MESSAGE_TEXT = 'Wroooong!!!'; END IF; END$$ DELIMITER ; INSERT INTO data VALUES ('+64-221221442'); -- should be OK INSERT INTO data VALUES ('+64-22122 WRONG 1442'); -- will fail with the error: #1644 - Wroooong!!! 

Sin embargo, no debe confiar únicamente en MySQL (capa de datos en su caso) para la validación de datos. Los datos deben validarse en todos los niveles de su aplicación.

    Intereting Posts