Hola. Tengo creada una tabla y quiero que un campo varchar(350), que es un dirección URL, un link vamos, sea PK.
Me da este error:
#1071 - Specified key was too long; max key length is 1000 bytes
qué estoy haciendo mal?
| ||||
Respuesta: Error en PK varchar(350) Es probable que uno o más valores existentes en la tabla estén creando problemas al ser leídos. Revisa que solo contengan direcciones web sin parametrizaciones.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Error en PK varchar(350) Cita: No existen las dobles PK. Una PK es no sólo un identificador único, sino que se usa para mantener el orden físico de los registros en disco. Por eso el sistema no admite dos.No sé si se pueden tener dos PK. ¿Podrías ordenar en una biblioteca los libros de dos formas distintas al mismo tiempo? Obviamente no. El libro es uno solo y ocupa un único espacio físico en un momento dado. Bueno, en el disco pasa lo mismo con los registros. Lo que si puedes hacer es crear índices UNIQUE sobre otro campo, tal que funciones como clave primaria alternativa y sea irrepetible. Es decir: Crea un índice UNIQUE. Eso si: Ten en cuenta que en un UNIQUE puede existe un registro donde ese campo sea NULL (es válido), pero sólo puede existir uno solo en la tabla, al igual que el resto de los registros, por lo que si la tabla tiene datos y existen dos registros con NULL o dos registros con caracter vacío, te reportará un error de ejecución y no podrá crear el índice. ¿Se entiende?
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Error en PK varchar(350) Se entiende perfectamente gnzsoloyo! Te lo agradezco. Lo único que he hecho pruebas y con varchar(350) no deja UNIQUE. He probado en un tabla de prueba aparte y deja máximo varchar(333), es eso posible o estoy haciendo algo mal? |
| ||||
Respuesta: Error en PK varchar(350) Url sin parametización:
Código:
Url con parametización:http://www.midominio.com
Código:
http://www.midominio.com/index.php?nombre=pepito&apellido=grillo&edad=88&ciudad=el%20bosque&telefono=999888777&otro_dato=cualquier%20cadena%20de%20mas%20de%20tresciento%20cincuenta%20caracteres%20eso%20si%puesto%20de%esta%20forma%20no%20parece%20que%20sean%20tantos%20verdad&otro_dato_mas=aqui%20podriamos%20seguir%20poniendo%20parametros%20para%20pasar%los%20trescientos%20cincuenta%20caracteres%20aunque%20ya%20los%20he%20pasado |
| ||||
Respuesta: Error en PK varchar(350) Cita: La verdad no entiendo lo que dices.¿Estás o no creando un índice UNIQUE? En ese caso ¿qué te dice MySQL? Si la tabla contiene datos, ¿verificaste que no haya direcciones repetidas? ¿Verificaste que los campos no contengan nada que no sea una dirección del tipo "www.xxxxxxx.xx.xxx"o algo semejante? Es decir, sólo deben contener direcciones puras y no secuencias de caracteres o parámetros para acceder a páginas internas, que pueden generar rupturas en la interpretación de la cadena. ¿Se entiende esto último?
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Error en PK varchar(350) Me da este error: #1071 - Specified key was too long; max key length is 1000 bytes Y sí, tengo enlaces tan raros como este: http://feedproxy.google.com/~r/unaweb/~3/A4PYCrMJAAs/ Y con parámetros también. Contiene todo tipo de URL de lo más variopintas y raras. De todas formas, como digo, en tabla aparte y vacía, no me deja crear UNIQUE de más de 333 caracteres varchar(333). Lo que sí que me deja es crear un índice "normal" (no unique) pero... a pesar de que el campo es varchar (350), el índice me lo crea con varchar(333). Raro, no? |
| ||||
Respuesta: Error en PK varchar(350) A mi entender, es un problema casi conceptual: Que declares el VARCHAR en 350 caracteres, no implica que el tamaño real se restrinja a esa longitud, por cuanto un VARCHAR puede contener hasta 65532 caracteres, lo que excede la longitud aceptable para una entrada de índice (1000 bytes). Como el CREATE INDEX toma de referencia el rango total posible, no te está admitiendo la creación de un indice ocn un tamaño de clave variable que supere lo indicado. La solución de manual sería que indexes definiendo cual es el tamaño que la entrada del índice debe tomar de referencia.
Código MySQL:
Donde "n" es un entero positivo que representa la logitud maxima declarada para ese campo en la tabla:Ver original
Código MySQL:
Ver original Prueba y me cuentas.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Error en PK varchar(350) Pues acabo de hacer lo que me dices y me crea un índice pero NO único y con varchar(333), es decir lo mismo que si le doy directamente a "Agregar índice" (crear índice "normal") directamente en la tabla. |
| ||||
Respuesta: Error en PK varchar(350) Mirando la documentación se podría hacer así CREATE UNIQUE INDEX nombreindice ON tabla(link(350)); pero me sale el mismo error: #1071 - Specified key was too long; max key length is 1000 bytes |
| ||||
Respuesta: Error en PK varchar(350) Vamos a ver el lado práctico de lo que quieres lograr: ¿Qué es lo que deseas conseguir al hacer un ídice UNIQUE sobre un campo que contiene datos de esa clase? ¿No tener que validar las entradas o qué? No es crear una PK, porque la PK ya la tienes... Por otro lado, postea la consulta y la estructura de la tabla que estás usando tal y como la estás escribiendo tu. Quiero verlas.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Error en PK varchar(350) Lo que quiero es meter link de una web, título y descripción. Además, necesito el autonumérico. El caso es que no quiero que se puedan ingresar dos links iguales. En teoría, tal y como lo tengo programado no debería poder suceder pero me quiero asegurar. Para ello, primero compruebo si el link existe, si no existe hago un INSERT. Para el SELECT que comprueba si existe el link, entiendo que lo mejor es que el campo link sea un índice, ya que de esa forma se acelera el SELECT, no? Aparte, también necesito el autonumérico para algunas consultas. Espero haberme explicado. |
| |||
Respuesta: Error en PK varchar(350) Creo que el problema está explicado aquí: http://bugs.mysql.com/bug.php?id=4521 si estás usando utf8 para ese campo, ese parece ser el problema. Puedes usar la codificación latin1 y probar |
| ||||
Respuesta: Error en PK varchar(350) Vaya jurena pues tenías razón, estaba usando utf-8 y bastó con cambiar a latin1, qué curioso! gracias a ti y a gnzsoloyo y a todos!!! Última edición por humanista; 06/05/2013 a las 09:56 |
Etiquetas: |