Aquí se encuentra la documentación de los cambios realizados en función de las distintas bases de datos que se han testado.1. La ordenación y las búsquedas no tienen que ser sensibles a los acentos ni distinguir entre mayúsculas y minúsculas.
Oracle:
Hay que modificar las variables de sesion NLS_SORT para que use un collation como SPANISH_AI (tiene que tener sufijo AI que indica que no es sensible a acentos ni mayúsculas) y NLS_COMP a LINGUISTIC para que las comparaciones se hagan de forma acorde a lo indicado en NLS_SORT.
Para aplicar esta configuración usar un trigger que cambie en la sesion estos valores como el siguiente:
CREATE OR REPLACE TRIGGER SYS.ALTER_COLLATION_FOR_SGI AFTER LOGON on DATABASE BEGIN IF ( user like '%_SGI' ) THEN execute immediate 'ALTER SESSION SET NLS_SORT=SPANISH_AI'; execute immediate 'ALTER SESSION SET NLS_COMP=LINGUISTIC'; END IF; END; |
SQL Server:
Al crear la base de datos indicar un collation con los sufijos CI (case-insensitive) y AI (accent-insensitive) como Modern_Spanish_100_CI_AI.
CREATE DATABASE SGI COLLATE Modern_Spanish_100_CI_AI; |
2. La longitud de las columnas de texto se debe de medir en caracteres, en lugar de en bytes.
Oracle:
Para que se defina el tamaño en caracteres la propiedad NLS_LENGTH_SEMANTIC tiene que tener el valor CHAR, para hacerlo hay que usar un trigger que cambie en la sesion estos valores como el siguiente:
CREATE OR REPLACE TRIGGER SYS.ALTER_NLS_FOR_SGI AFTER LOGON on DATABASE BEGIN IF ( user like '%_SGI' ) THEN execute immediate 'ALTER SESSION SET NLS_LENGTH_SEMANTICS="CHAR"'; END IF; END; |
SQL Server:
Aunque la longitud se mide en bytes con las codificaciones habituales para el español los caracteres usan un solo byte.
3. (SQL Server) Nivel de aislamiento READ_COMMITTED_SNAPSHOT si se producen dead locks
Tanto en Oracle como en SQL Server el nivel por defecto es READ_COMMITTED pero aunque el nombre sea el mismo no se comportan del mismo modo y SQL Server realiza bloqueos también en las lecturas lo que puede producir dead locks con mayor probabilidad (https://www.dbi-services.com/blog/how-sql-server-mvcc-compares-to-oracle-and-postgresql/), en el caso de detectarlos se debería de configurar como READ_COMMITTED_SNAPSHOT que tiene un comportamiento más similar al comportamiento por defecto de postgres y oracle.
ALTER DATABASE SGI SET READ_COMMITTED_SNAPSHOT ON; |