Comparaciones en Mysql MariaDB

213 views
Skip to first unread message

Francisco

unread,
Jun 13, 2019, 12:11:04 PM6/13/19
to Comunidad de Visual Foxpro en Español
Alguien me puede explicar como compara MySQL pq creía una cosa pero viendo lo que me da en esta consulta me ha roto todos los esquemas...

SELECT ASCII('ÿ'), ASCII('Z') , 'ÿ'>'Z'

Me devuelve 195,90, 0


Hasta ahora para hacer rangos para las cadenas he utilizado el between entre '' (nada) y la  cadena compuesta por el chr(255) pero por lo visto pese a que en fox funcionaba en Mysql no es así. 

Alguna solución? 

Antonio Meza

unread,
Jun 13, 2019, 4:14:54 PM6/13/19
to Comunidad de Visual Foxpro en Español
SELECT ASCII('ÿ'), ASCII('Z') , 'ÿ'>'Z', ASCII('ÿ') > ASCII('Z')

195, 90, 0, 1

Pero que es lo que realmente quieres hacer??

saludos
Antonio Meza

Víctor Hugo Espínola Domínguez

unread,
Jun 13, 2019, 4:31:54 PM6/13/19
to publice...@googlegroups.com
Las comparaciones entre caracteres dependen de la configuración del COLLATE, en VFP prueba:

? "ÿ" > "Z"
SET COLLATE TO "GENERAL"
? "ÿ" > "Z"

Saludos,
Víctor.
Lambaré - Paraguay.



--
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/2e216326-d0bd-4e84-94f3-5221a79b0a45%40googlegroups.com.

Francisco

unread,
Jun 14, 2019, 2:34:49 AM6/14/19
to Comunidad de Visual Foxpro en Español
Imagina que tengo valores de tres caracteres cuales quiera para hacer un between en Mysql que caracter para completar la cadena hasta de 3 caracteres utilizo

hasta ahora creía que con campo between '' and 'ÿÿÿ' estaba correcto pero veo que no como puedo completar una cadena desde fox con tres caracteres que sean siempre mayores...

ZeRoberto

unread,
Jun 14, 2019, 9:19:28 AM6/14/19
to publicesvfoxpro
Porque usas esos caracteres con diéresis, puedes darnos un contexto?


Saludos

Ze



--
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.

Víctor Hugo Espínola Domínguez

unread,
Jun 14, 2019, 11:24:40 AM6/14/19
to publice...@googlegroups.com
No entiendo pues 'cualquier carácter'  between '' and 'ÿÿÿ'  es lo mismo  1=1, toda vez que COLLATE sea MACHINE.

Saludos,
Víctor.
Lambaré - Paraguay.


--

Francisco

unread,
Jun 17, 2019, 7:20:32 AM6/17/19
to Comunidad de Visual Foxpro en Español
Imagina un formulario de entrada donde pone 
desde texto :
hasta texto : 
Donde el usuario puede introducir en formato XXX cualquier cosa y debo de hacer un select por un campo de los valores entre ambas, pero si no rellena nada deben de salir todos, si rellena solo el primero desde el valor puesto en primero al ultimo valor y si rellena el ultimo. Hasta ahora asignaba desde el comienzo unos valores inicial y final pre establecidos ejemplo desde='' y hasta = '' valor máximo para ese campo en mi caso si era carácter lo rellenaba con el chr(255) que era el mayor para cualquier comparación de texto. El caso es que ese valor 255 no se ve pero internamente funcionaba. Así que por ejemplo si hacia esto:

desdetxt.value=''
hastatxt.value=replicate(chr(255),3)

Luego el usuario podría cambiar los valores a su gusto a través del form y la consulta a lanzar siempre es la misma: select campos from la tabla where campo between (desdetxt.value) and (hastatxt.value)

Eso es todo...

 

El viernes, 14 de junio de 2019, 15:19:28 (UTC+2), ZeRoberto escribió:
Porque usas esos caracteres con diéresis, puedes darnos un contexto?


Saludos

Ze



El vie., 14 de jun. de 2019 a la(s) 01:34, Francisco (dire...@informatica-apliges.com) escribió:
Imagina que tengo valores de tres caracteres cuales quiera para hacer un between en Mysql que caracter para completar la cadena hasta de 3 caracteres utilizo

hasta ahora creía que con campo between '' and 'ÿÿÿ' estaba correcto pero veo que no como puedo completar una cadena desde fox con tres caracteres que sean siempre mayores...

El jueves, 13 de junio de 2019, 22:14:54 (UTC+2), Antonio Meza escribió:
SELECT ASCII('ÿ'), ASCII('Z') , 'ÿ'>'Z', ASCII('ÿ') > ASCII('Z')

195, 90, 0, 1

Pero que es lo que realmente quieres hacer??

saludos
Antonio Meza

El jueves, 13 de junio de 2019, 11:11:04 (UTC-5), Francisco escribió:
Alguien me puede explicar como compara MySQL pq creía una cosa pero viendo lo que me da en esta consulta me ha roto todos los esquemas...

SELECT ASCII('ÿ'), ASCII('Z') , 'ÿ'>'Z'

Me devuelve 195,90, 0


Hasta ahora para hacer rangos para las cadenas he utilizado el between entre '' (nada) y la  cadena compuesta por el chr(255) pero por lo visto pese a que en fox funcionaba en Mysql no es así. 

Alguna solución? 

--
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publice...@googlegroups.com.

Francisco

unread,
Jun 17, 2019, 10:12:45 AM6/17/19
to Comunidad de Visual Foxpro en Español
Antonio simplemente no se exactamente el porqué en fox si pones 

? ASC('ÿ')
? ASC('Z')
? 'ÿ'>'Z'
? ASC('ÿ') > ASC('Z')

Da

255
90
.t. 
.t.

Y en Mysql SELECT ASCII('ÿ'), ASCII('Z') , 'ÿ'>'Z', ASCII('ÿ') > ASCII('Z') que es lo mismo da 192,90,0,1 Lo que me choca es el 0 de la operación "mayor que" que es fox es .t.

Solo eso... que no es poco... Dado que creía que cualquier comparación entre cadenas se realizaba según su peso ASCII y veo que no es así...

El jueves, 13 de junio de 2019, 22:14:54 (UTC+2), Antonio Meza escribió:

Carlos Miguel FARIAS

unread,
Jun 17, 2019, 11:18:34 AM6/17/19
to Grupo Fox
El orden las comparaciones dependerá del COLLATE activo. Un Collate que interprete los caracteres con acentos, diéresis, etc. va a poner cualquier y (con lo que tenga arriba) antes que la z, y hasta en algunos casos ser o no ser sensibles a mayúsculas/minúsculas.
En mysql puede estar pasandote eso (que puede ser emulado en VFP) cuando usas ASCCI, forzas a un COLLATE en particular, en VFP normalmente tienes activado el orden ASCCI (por peso o código interno) en mysql, puedes tener activado otro (y eso puede fijarse creo que por tabla).
Saludos: Miguel

--
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/26de6f49-1a94-4803-bf3e-b99c541af5bb%40googlegroups.com.

Francisco

unread,
Jun 17, 2019, 11:24:59 AM6/17/19
to Comunidad de Visual Foxpro en Español
El Collantion en mysql que tengo predeterminado en el servidor es utf8_general_ci ... supongo que será por eso... al pasar de fox a mysql ese chr(255) ya no ocupa dicha posición... investigaré para cambiar este relleno.... 
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publice...@googlegroups.com.

Víctor Hugo Espínola Domínguez

unread,
Jun 17, 2019, 1:50:12 PM6/17/19
to publice...@googlegroups.com
En  utf8_general_ci  "ci" significa case insensitive y por lo tanto 'a' < 'Z' es verdad, en el select ... where debes forzar a que en vez de ci use bin.

 
Saludos,
Víctor.
Lambaré - Paraguay.


Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/50c0a2c1-964a-456d-954b-718a390797e4%40googlegroups.com.

Alejandro Isla

unread,
Jun 17, 2019, 10:57:40 PM6/17/19
to Comunidad de Visual Foxpro en Español
El resultado de tu sentencia es perfecto, le decis asignar al primar campo ASCII('ÿ'), que es 195
asignar al segundo campo ASCII('Z'), que es 90 y al tercer campo el resultado de la operación lógica entre caracteres 'ÿ'>'Z', que es falso = 0 (porque depende del collate y charset, no del valor ascii)

Por ejemplo en el charset español:  utf8_spanish_ci y utf8_spanish2_ci. la "CH" se ordena en uno (tradicional) como una letra única entre C y D y en el moderno como una  C

CACHO
CHANCHO
CORTO
DEDO



CACHO
CORTO
CHANCHO
DEDO


CORTO > CHANCHO dependerá de tu collate.

Saludos
Reply all
Reply to author
Forward
0 new messages